C ++ - 获取派生类型作为模板参数

时间:2016-04-01 07:43:36

标签: c++ templates c++11

我有一些我正在处理的模板场景。这是它的设置。

class Base {

}

class Derived : Base {

};

我的用例:

void DoAThing(Base* t) {
     DoAnotherThing(*t);
}

template<typename T>
void DoAnotherThing(T& t) {
}

所以我希望的是我可以将Derived类型传递给我的“DoAThing”,然后当我将其传递给DoAnotherThing时,模板参数将显示为Derived。我可以看到dereferenced类型肯定是由typeid解析为Derived,但是T类型的DoAnotherThing总是以Base形式出现。有没有办法可以操作它,以便DoAnotherThing解析为我发送的派生类型?

编辑:感谢目前为止的答案,但我的用例还没有完全解决。 DoAnotherThing实际上是创建Derived类的容器,问题是容器类型最终是Container而不是Container。我希望DoAThing继续使用Base而不是作为调用它的场景的模板。

1 个答案:

答案 0 :(得分:1)

根据你的例子,你应该进行上部强制转换,如果你想从带有指向基类的指针的DoAThing方法调用带有指向派生类的指针的DoAnotherThing函数。要实现此目的,您可以使用2个选项:
1)使用RTTI并获得实际类型,但它需要运行时 2)使用此方法http://arturx64.github.io/programming-world/2015/02/05/lazy-visitor.html进行没有RTTI的上部投射。