动态更改类的模板参数

Dynamically changing the template parameters of a class

本文关键字:参数 动态      更新时间:2023-10-16

有可能做到吗?

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

#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没有什么不同。

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

这种做法有"危险"吗?

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

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