c++ - 动态改变类的模板参数

标签 c++ templates

有可能实现吗?

例如,考虑以下代码片段:

#include <iostream>
using namespace std;

template <typename T> class A {
public:
  void print() {
    T var;
    cout << sizeof(var) << endl;
  }
};

int main() {
  A<int>* c = new A<int>;
  c->print();

  A<char>* d = reinterpret_cast<A<char>*>(c);
  d->print();
}

这种做法有“危险”吗?

最佳答案

是的,这会调用未定义的行为。 A<char>A<int>是完全不相关的类型。所以将转换重新解释为 B 没有什么不同.

在实践中,它可能会起作用(至少对于这么简单的事情)。但这并不意味着您可以信赖它。

关于c++ - 动态改变类的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10863126/

相关文章:

c++ - 命名空间作为 CUDA 中的模板参数

c++ - unique_ptr : How to safely share raw pointer

c++ - 在外部 Unix 机器上执行程序时可能出现链接器错误

c++ - C++ 中 decltype(this) 的类型是什么?

c++ - 如何获得模板参数包的最大成员?

javascript - 使用 Dustjs 进行 Angular 模板化

C++11 直接列表初始化语法

c++ - 如何将 `std::string` 放入 Clang 虚拟文件中?

php - 仅用于发布的模板

c++ - 如何将模板转换为模板 pre C++11