运行时的模板类型名称

时间:2015-03-12 10:59:38

标签: c++

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

// 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 ?

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

1 个答案:

答案 0 :(得分:2)

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

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