动态更改类的模板参数

时间:2012-06-02 14:31:02

标签: 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();
}

这种实践是否存在“危险”?

2 个答案:

答案 0 :(得分:3)

是的,这将调用未定义的行为。 A<char>A<int>完全不相关。因此,重新解释为B

并没有什么不同

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

答案 1 :(得分:1)

  

这种实践是否存在“危险”?

这是未定义的行为,因为您正在将指针转换为其他类型然后调用函数。
请注意,A<int>A<char>是不同的类型;不要混淆同名A

Here是Bjarne Stroustrup网页上的一篇很好的相关文章。