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;
最初の基本型のオーバーロードと一致させ、他のコンパイル エラーを引き起こします。GCC および VS2015 でコンパイルされる非コンテナー タイプのテンプレートとコンテナー タイプのテンプレートを作成するにはどうすればよいですかoperator>>()
(コンテナー タイプごとに特化する必要はありません)。