我有一個類層次結構,我想介紹一個方法模板,它的行爲就像虛擬一樣。例如一個簡單的層次結構:如何模擬方法模板的虛擬性
class A {
virtual ~A() {}
template<typename T>
void method(T &t) {}
};
class B : public A {
template<typename T>
void method(T &t) {}
};
然後,我創建對象B:
A *a = new B();
我知道我可以通過typeid(a)
存儲在a
類型。當我知道該類型時,如何動態調用正確的B::method
?我可能有這樣的情況:
if(typeid(*a)==typeid(B))
static_cast<B*>(a)->method(params);
但我想,以避免類似的情況。我正在考慮創建一個std::map
作爲關鍵字typeid
,但是我會把它作爲一個價值?
我不能那樣做。我真的需要一個方法模板。 –
@JurajBlaho:我又增加了一個想法。 –
@JurajBlaho:恩,[使成員模板虛擬只是不能在C + +](http://stackoverflow.com/questions/2354210/can-a-member-function-template-be-virtual/2354671#2354671) ,所以你將不得不重新考慮你的方法,並對語言的限制做出一些讓步。 – sbi