Следующий код работает нормально:
template<typename T>
struct Wrap {};
template<template <class> class OUT, typename IN>
void Extract (OUT<IN> *obj)
{ /* only class 'IN' is used in some way */ }
int main ()
{
Wrap<int> obj;
Extract(&obj);
}
Но я передаю аргумент-указатель для извлечения внешнего типа и внутреннего типа.
Есть ли лучший способ, с помощью которого я могу вызватьметод с явным созданием шаблона?Extract<Wrap<int> > ()
;
Редактировать:
Я опишу свой вопрос немного подробнее.Это объясняет, почему простой ответ, такой как Extract<Wrap, int>();
, невозможен.Я пишу анализатор текста, для кода C ++.Где бы парсер не находил,
x = (Type) y;
он должен конвертироваться в
x = Extract<Type> (y);
Теперь тип может быть
- любым нормальным типом, например,
int*
или A**
- некоторый шаблонизированный шаблон, такой как
Wrap<A>
Теперь Extract()
работает по-разному для обоих случаев.Я должен выяснить, используя шаблон, будь то Extract<int*>
или Extract<Wrap<int> >
.
==> На более простом языке этот метод можно назвать:
Extract<int*>()
Extract<Wrap<int> >()
Я могу выяснить, вызывается ли он в первом случае, но как я могу определить, вызывается ли он во втором случае?(при условии, что я также хочу знать внутренний тип).