Iは、非テンプレートベースから検索派生テンプレートの種類
struct CBaseList {
virtual size_t Size() = 0;
};
template <class T>
struct CPointList : public BaseList {
virtual size_t Size() { return mData.size(); }
std::vector <T> mData;
};
// Ok, now I can create various instances
CBaseList * lst1 = new CPointList<float>();
CBaseList * lst2 = new CPointList<double>();
をテンプレートクラスを派生してきた。しかし、どのように私は/異なるインスタンス間で値を割り当てるコピーすることができますか?例えば、
template <class T1, class T2>
void CopyVec(const T1 & src, T2 & dst)
{
dst.resize(src.size());
for (size_t i = 0; i < src.size(); ++i)
dst[i] = src[i];
}
void CopyList(const CBaseList * src, CBaseList * dst)
{
// How to call CopyVec ?
}
CBaseListを任意の派生クラスにキャストした場合、私は大きな「醜い」スイッチを持っています。より良い解決策はありますか?
おかげ イゴールご回答のため
thiton
感謝。どのコンパイラでもテンプレートからコードを生成するための型があることがわかっています。しかし、必要なテンプレート関数を複製することなく、コンパクトかつ一度実装する方法はありますか?
// caller
theWrapper(lst1, lst2)->mInstance().DoCopy(lst1, lst2, num);
// mInstance type
template <class T1, class T2>
struct CWrapInstance {
void DoCopy(CBaseList * lst1, CBaseList * lst2, size_t num)
{
// cast types and call original template
Copy(((T1 *) lst1)->mData, ((T2 *) lst2)->mData, num);
}
};
したがって、新しいテンプレートごとにCWrapInstanceに小さなメソッドしか追加する必要はありません。しかし、どのように "theWrapper"を設計するのですか?
Thxご理解ください。 Igor