Если вы вообще назовете тип, он должен быть полным (то есть Foo<int>
, а не просто Foo
).
Класс может иметь несколько конструкторов или может не иметь конструкторов, у которых есть параметр параметра типа шаблона класса, поэтому нет способа заставить это работать для всех шаблонов классов (на мой взгляд, иногда было бы сложно иметь эту работу но не всегда).
Если все в порядке, если вы вообще не называете тип, вы можете написать MakeFoo<T>()
шаблон функции, который создает Foo<T>
, и использовать вывод аргумента шаблона функции:
template <typename A>
Foo<A> MakeFoo(const A& a) { return Foo<A>(a); }
Этот шаблон обычно используется в C ++ (см., Например, make_shared
).
Однако, если вы хотите сохранить возвращенный объект в переменной, эта переменная все еще должна иметь тип. Если вы можете перейти к компилятору, который поддерживает C ++ 0x auto
(например, Visual C ++ 2010), вы можете использовать это. В противном случае вы можете использовать стороннее решение, такое как BOOST_AUTO
или написать свое собственное (хотя это, вероятно, будет довольно много работы (-:).
С auto
ваш код будет выглядеть так:
auto foo(MakeFoo(myval));