我想operator>>()
为任何“基本”类型和任何容器类型提供重载。这是我到目前为止所拥有的:
typedef uintmax_t my_t;
template <typename T>
std::istringstream &operator>>(std::istringstream &iss, T &v)
{
static my_t um = 6009;
v = um++;
return iss;
}
template <template <class> class C, typename T>
std::istringstream &operator>>(std::istringstream &iss, C<T> &c)
{
for (typename C<T>::iterator it = c.begin(); it != c.end(); ++it)
iss >> *it;
return iss;
}
int main()
{
std::vector<uint32_t> vi(3);
std::istringstream iss;
iss >> vi;
for (std::vector<uint32_t>::iterator it = vi.begin(); it != vi.end(); ++it)
std::cout << *it << std::endl;
}
这可以按预期使用 GCC 编译和运行,但甚至无法在 VS2015 上编译。后者>>
将语句中的运算符iss >> vi;
与第一个基类型重载相匹配,这会触发其他编译错误。如何operator>>()
为非容器类型编写模板和容器类型模板(无需专门针对每种容器类型),用 GCC 和 VS2015 编译?