我正在处理一个小的模板场景。这是它的设置。
class Base {
}
class Derived : Base {
};
我的用例:
void DoAThing(Base* t) {
DoAnotherThing(*t);
}
template<typename T>
void DoAnotherThing(T& t) {
}
所以我所希望的是我能够将派生类型传递到我的“DoAThing”中,然后当我将它传递给 DoAnotherThing 时,模板参数将显示为 Derived。我可以看到取消引用的类型肯定是由 typeid 解析为 Derived,但是 DoAnotherThing 的 T 类型总是作为 Base 出现。有什么方法可以操纵它,以便 DoAnotherThing 解析为我发送的派生类型?
编辑:感谢到目前为止的回答,但我的用例还没有完全解决。 DoAnotherThing 实际上是创建一个 Derived 类的容器,问题是容器类型最终是 Container 而不是 Container。我希望 DoAThing 继续采用 Base,而不是成为调用它的场景的模板。
最佳答案
根据你的例子,如果你想从带有指向基类的指针的 DoAThing 方法调用带有指向派生类的指针的 DoAnotherThing 函数,你应该进行上层转换。为此,您可以使用 2 个选项:
1) 使用 RTTI 并获取真实类型,但它需要运行时。
2)使用这个方法http://arturx64.github.io/programming-world/2015/02/05/lazy-visitor.html在没有 RTTI 的情况下进行上层类型转换。
关于C++ - 获取派生类型作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350738/