Поскольку вы должны назвать тип переменной (C ++ 03 не может определить тип переменной), вы можете сделать только:
A<double> a(5.5); // that's what i don't want to do
Ситуация немного проще, когдавам не нужно создавать переменную типа, но вы хотите передать ее другой функции.В этом случае вы определяете вспомогательную «функцию конструктора» (см. std::make_pair
):
template <class T>
A<T> make_a(T t) { return A<T>(t); }
, а затем используете ее следующим образом:
another_function(make_a(1.1));
В C ++ 0x,вы сможете даже
auto a(make_a(5.5));
определить свою переменную a
.
Однако вывести аргумент A
из его конструктора, как правило, невозможно, потому что вы можете 't сказать, какие специализации имеют конструктор преобразования из данного типа.Представьте, что есть специализация
template <>
struct A<void>
{
A(double);
};