这更像是一个好奇心问题,而不是实际需要。代码如下,这是一个问题:
// 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 ?
更新:所以我跳过一些代码以使其更简单,但似乎我省略了太多的代码。
答案 0 :(得分:2)
那将无法编译,因为BaseIRNode
是一个类模板,而不是一个类。您需要使some_fun
成为一个函数模板,然后您可以使用从参数类型中推导出模板参数并对其进行操作:
template <typename T>
void some_fun(BaseIRNode<T>* node) {
//some stuff with T
}