Взяв тип шаблонного класса

Есть ли способ взять тип класса шаблона, например

//i have template function
template<typename T>
IData* createData();

//a template class instance
std::vector<int> a;

//using type of this instance in another template
//part in quotation mark is imaginary of course :D
IData* newData = createData<"typeOf(a)">();

возможно ли это в с++? или есть альтернатива ярлыку


person Qubeuc    schedule 27.06.2009    source источник
comment
Не совсем уверен, что вы хотите. Вы пытаетесь «извлечь» тип int из std::vector‹int›, чтобы тип, который вы указываете для функции CreateData, был int вместо std::vector‹int›?   -  person Kei    schedule 28.06.2009
comment
Если вы имеете в виду то, что подозревает @Kei, то вот обман: stackoverflow .com/questions/301203/ :)   -  person Johannes Schaub - litb    schedule 28.06.2009


Ответы (2)


Да — используйте boost::typeof

IData* newData = createData<typeof(a)>();

Новый стандарт (C++0x) предоставит для этого встроенный способ.

Обратите внимание, что вы можете указать createData фиктивный аргумент, который компилятор может использовать для вывода типа.

template<typename T>
IData* createData(const T& dummy);

IData* newData = createData(a);
person Dario    schedule 27.06.2009

Не понятно о чем вы спрашиваете. Параметр templates — это его тип, например:

template<typename T> IData* createData() {
   return new T();
}

Теперь мы можем сказать:

IData * id = createData <Foo>();

который создаст новый экземпляр Foo, который лучше получить из Idata.

person Community    schedule 27.06.2009