动态更改类的模板参数
Dynamically changing the template parameters of a class
有可能做到吗?
例如,考虑以下代码片段:
#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网页上的一篇很好的相关文章。
相关文章:
- C++基于输入参数的动态代码生成
- 我可以动态创建新地图并作为函数参数传递吗?
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 将数组动态分配到具有指针参数的函数中
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- 传递给函数的模板化参数的动态大小数组
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 动态构建模板参数包
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- 动态创建和扩展STD ::元组为参数包
- 如何在不动态铸造的情况下使用派生的参数
- 如何动态执行具有任意参数类型的函数指针
- 在C 中解开包装的类似Python的动态参数
- 将动态创建的数组作为参数传递
- 如何使用一些参数初始化动态分配的数组中的对象
- 为 C 绑定创建动态以 null 结尾的参数
- C++ CPP 使用参数动态调用 DLL
- 用CPP中的参数动态调用外部DLL