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

标签 c++ templates c++11

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

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/

相关文章:

c++ - 确定阈值参数的正确方法

c++ - 如何使 friend 类的层次结构?

javascript - 在 Windows 中预编译 Handlebars.js 模板

php - 如何使用 PHP 将 HTML 转换为可实时编辑的模板?

c++ - 'void *' to ' void (*) (bool)' 使用 C++ 编译器在 C 中编译文件的指针错误

c++ - 理解(简单?)C++ 部分模板特化

c++ - clang 和 g++ 在处理 const 对象时的差异

c++ - 声明/定义自定义类 cout 对象的正确方法

c++ - 长数组缓存问题

xcode - Xcode 目标与普通目标的 CMake