は、Aは、基本クラスであり、Bは、派生クラスである:C++、関数の引数のtemplatization対多型
template <typename T>
class A {T a;};
template <typename T>
class B: public A <T> {T b;};
変性容器
を表す次のクラスtemplate <typename Item>
struct TItems {typedef std::vector <Item> Type;};
template <typename Item>
class ModCont
{
private:
typename TItems <Item>::Type items;
};
機能試験は、()仮パラメータとしてオブジェクトのコンテナへのポインタを有する。
template <typename T>
void test (ModCont <A <T> > *it) {}
Iが多型を適用し、方法試験にBの容器を通過したい:
int main(int argc, char* argv[])
{
ModCont < A <double> > a_items;
ModCont < B <double> > b_items;
test (&a_items); //Works
test (&b_items); //Does not work
return 0;
}
Iが見出さ唯一の方法は、このように試験()メソッドのパラメータをテンプレート化することである。
template <typename Object>
void test (ModCont <Object> *it) {}
代わりにコンパイル多型の「機能」多型(テンプレート?)あなたの助けを
感謝の使用方法をどのような方法があります...
あなたはひどく混乱しています:(1)テンプレートは多態性の形です(2)テンプレートはコンパイル時に特化されていますが、ランタイムではありません。 – Marcin
@Marcin:あなたのコメントありがとう... – justik
あなたの関数 'test'は、与えられたように、メソッドではなく自由な関数です。問題を示す最小限のコンパイル可能なコードを表示してください。実際に行ったことを推測する必要はありません。 – celtschk