私は、コンテナ要素の反復のための簡単な一般化関数を書こうとしています。すべての要素はstd::string
に(どのように)変換され、別の場所に格納されます。基本的なバージョンは些細だった:標準ライブラリコンテナの一般化された関数テンプレート
template<class Container>
void ContainerWork(const Container& c)
{
for(const auto& elem : c) {
/* convert to string and store*/
}
}
はそれからに変換値型std::string
とコードとのコンテナの特殊化を追加する必要になった:
template<typename T, template<typename, typename> class Container, class Allocator>
void ContainerWork(Container<T, Allocator> c)
{
for(const T& elem : c) {
/* convert to string and store*/
}
}
template<template<typename, typename> class Container, class Allocator>
void ContainerWork(Container<std::string, Allocator> c)
{
for(const std::string& elem : c) {
/* frame elem in quotes*/
}
}
それは素晴らしい作品が、今私は、シーケンスコンテナを使用することができます(vector
,list
など)ですが、set
とunordered_set
も使用します。任意のアイデアはどのように4つのパラメータを持つコンテナの "コピー貼り"の実現なしでこれを行うのですか?私はdecltype(Container)::value_type
と遊ぶことを試みているが運がない。
私は(コンパイラ - VS2012またはGCC 4.8.x)++ 11個の機能Cのほとんどを使用することができ、
計算できません...エラー... VS2012でコンパイルします。 – DarkWanderer
@DarkWandererバリデーションテンプレートにはVS2013以降を使用してください。 – rubenvb
@rubenvb:OPはVS2012を言いましたので、コメント – DarkWanderer