我有一个类层次结构,我想介绍一个方法模板,它的行为就像虚拟一样。例如一个简单的层次结构:如何模拟方法模板的虚拟性
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