Синтаксис для специализированных шаблонов функций в C ++ - PullRequest
6 голосов
/ 05 августа 2011

Предположим, у меня есть шаблон функции, в котором параметр типа используется только в качестве возвращаемого типа:

template <typename T>
T foo()
{
    return whatever;
}

Тогда каков правильный синтаксис, чтобы специализировать этот шаблон функции? Кажется, работают оба из следующих:

template <>
std::string foo()
{
    return whatever;
}

template <>
std::string foo<std::string>()
{
    return whatever;
}

Есть ли разница между ними? Если нет, то каков идиоматический способ?

Ответы [ 2 ]

1 голос
/ 05 августа 2011

В большинстве случаев нет никакой разницы между этими двумя.

Если вы перегружаете несколько шаблонных функций, вторая форма может понадобиться, чтобы убрать неоднозначность относительно того, какую перегрузку вы хотите специализировать (у вас, вероятно, есть другиепроблемы, если вы находитесь в такой ситуации, например, вам также нужно быть явным в местах вызова).

1 голос
/ 05 августа 2011

Компилятор выведет правильную специализацию шаблона на основе предоставленной информации (здесь, тип возвращаемого значения функции).

Таким образом, эти синтаксисы имеют абсолютно одинаковое поведение, причем один из них более явный, чем другой.

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