name()
メソッドを持つ配列の文字列表現を生成するテンプレート関数を作成したいとします。物事値によって、または参照(生またはスマート)によって保持される可能性がありますオブジェクトのベクトルのテンプレート文字列表現
template< typename T>
struct GetStringRepresentation;
template< typename T>
struct GetStringRepresentation< std::vector< std::unique_ptr<T> > >
{
inline void()(const std::vector< std::unique_ptr<T> >& seq, std::string& out)
{
size_t size = seq.size();
for (int i=0; i< size; i++)
{
if (i > 0)
out += ", ";
out += seq[i]->name();
}
}
};
template< typename T>
struct GetStringRepresentation< std::vector< std::shared_ptr<T> > >
{
inline void()(const std::vector< std::shared_ptr<T> >& seq, std::string& out)
{
size_t size = seq.size();
for (int i=0; i< size; i++)
{
if (i > 0)
out += ", ";
out += seq[i]->name();
}
}
};
template< typename T>
struct GetStringRepresentation< std::vector< T* > >
{
inline void()(const std::vector< T* >& seq, std::string& out)
{
size_t size = seq.size();
for (int i=0; i< size; i++)
{
if (i > 0)
out += ", ";
out += seq[i]->name();
}
}
};
template< typename T>
struct GetStringRepresentation< std::vector<T> >
{
inline void()(const std::vector<T>& seq, std::string& out)
{
size_t size = seq.size();
for (int i=0; i< size; i++)
{
if (i > 0)
out += ", ";
out += seq[i].name();
}
}
};
あなたがはっきりと見ることができるように、重複の束は特別に参照専門分野の間で、そこにあります。私はこれを行う最善の方法でスピードアップするつもりはありません、私はコードの重複のいくつか、またはすべてを削除するより良い方法を見たいと思います。