2015-03-12 9 views
-1

Это скорее вопрос любопытства, чем реальная потребность. Код ниже, и вот вопрос:Имя шаблона во время выполнения

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

UPDATE: так что я пропустил некоторый код, чтобы сделать его более простым, но, кажется, я пропустил слишком много коды.

+0

'BaseIRNode' этом имя шаблона для классов, а не класса. Так что ваш код просто не работает. – Deduplicator

+0

Как написано, ваш код не компилируется. Можете ли вы уточнить, что вы действительно хотите? – Angew

+0

«Знай, какой тип». Как вы хотите, чтобы эта информация была представлена ​​в вашей программе? –

ответ

2

Это не скомпилируется, потому что BaseIRNode - это шаблон класса, а не класс. Вам нужно сделать some_fun шаблон функции, то вы можете изменить значение выводит параметр шаблона от типа аргумента и работать на том, что:

template <typename T> 
void some_fun(BaseIRNode<T>* node) { 
    //some stuff with T 
} 
Смежные вопросы