| 2 | |
| 3 | template <typename T> |
| 4 | void istream_helper(std::istream& in, T& vs) { |
| 5 | std::string tokens; |
| 6 | in >> tokens; |
| 7 | std::vector<std::string> strs; |
| 8 | boost::split(strs, tokens, boost::is_any_of(",")); |
| 9 | for (auto& s : strs) { |
| 10 | if constexpr (std::is_same_v<std::decay_t<T>, std::set<std::string>>) { |
| 11 | vs.insert(s); |
| 12 | } else if constexpr (std::is_same_v<std::decay_t<T>, std::set<int>>) { |
| 13 | vs.insert(boost::lexical_cast<typename T::value_type>(s)); |
| 14 | } else if constexpr (std::is_same_v<std::decay_t<T>, std::vector<double>>) { |
| 15 | vs.push_back(boost::lexical_cast<typename T::value_type>(s)); |
| 16 | } |
| 17 | } |
| 18 | } |
| 19 | |
| 20 | std::istream& std::operator>>(istream& in, set<int>& ints) { |
| 21 | istream_helper<std::set<int>>(in, ints); |