gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:45:16 28 4
gpt4 key购买 nike

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

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com