автоматические шаблоны классов? - PullRequest
3 голосов
/ 13 ноября 2008

Есть ли способ, чтобы компилятор автоматически определял параметр шаблона?

template<class T> 
struct TestA 
{
    TestA(T v) {} 
};
template<class T>
void TestB(T v)
{
}
int main()
{
    TestB (5);
}

Тест B работает нормально, однако, когда я изменяю его на TestA, он не будет компилироваться с ошибкой «использование шаблона класса требует списка аргументов шаблона»

Ответы [ 2 ]

11 голосов
/ 13 ноября 2008

Нет, нет. Шаблоны классов никогда не выводятся. Обычный шаблон должен иметь make_ свободную функцию:

template<class T> TestA<T> make_TestA(T v)
{
    return TestA<T>(v);
}

См., Например, std::pair и std::make_pair.

В C ++ 0x вы сможете сделать

auto someVariable = make_TestA(5);

чтобы не указывать тип для локальных переменных.

0 голосов
/ 13 ноября 2008

Солнечный свет прав, но если я могу задать вам вопрос: действительно ли это проблема в вашем коде. Я имею в виду:

TestA(5);

станет

TestA<int>(5);

Пока это только один аргумент шаблона, это не так уж плохо, ИМХО. В большинстве случаев вы не можете печатать один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...