有兩種類A和B,其中A是基類和B是派生類:C++,多態性與函數參數的模板化
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) {}
我想申請多態性與通過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;
}
我發現的唯一的方法是模板化以這種方式的測試()方法的參數:
template <typename Object>
void test (ModCont <Object> *it) {}
有什麼辦法如何使用「功能」的多態性,而不是編譯多態性(模板?)
感謝您的幫助......
你很困惑:(1)模板是多態的一種形式(2)模板在編譯時是專用的,不是運行時。 – Marcin 2012-01-14 10:08:18
@Marcin:感謝您的評論... – justik 2012-01-14 10:11:17
您的函數'test',如給出的,不是一個方法,而是一個自由函數。請顯示最小的可編譯代碼來顯示問題,所以我們不必猜測您真正做了什麼。 – celtschk 2012-01-14 10:13:38