运行时的模板类型名称

Template type name at runtime

本文关键字:类型 运行时      更新时间:2023-10-16

这更像是一个好奇的问题,而不是实际需求。代码如下,问题是:

// header file
class IRNode {
virtual void imple() =0;
}
// one and only derivative of IRNode
template<typename T>
class BaseIRNode : public IRNode { 
// .. some code
void imple() {}
};
// a library function    
IRNode* some_fun() {
return new BaseIRNode<int>(); // just for example, assume we dont know this!
}
// my code
IRNode* myObj = some_func(); 
// I wonder what template T was used to construct BaseIRNode concrete object
// how can I find that out ?

更新:所以我跳过了一些代码以使其更简单,但似乎我省略了太多代码。

不会编译,因为BaseIRNode是一个类模板,而不是一个类。您需要some_fun函数模板,然后您可以使用从参数类型推导出模板参数并对其进行操作:

template <typename T>
void some_fun(BaseIRNode<T>* node) {
    //some stuff with T
}