Предположим, у меня есть шаблон функции, как это:Полная specializtion функции шаблона для возвращаемого значения шаблона
template <typename Key>
Key foo(const string &name);
Я знаю, что, специализирующимся функции шаблона, мы должны полностью специализироваться это так:
template<>
int foo<int>(const string &name);
Но теперь я ищу способ, чтобы специализироваться эту функцию для объекта шаблона, что-то вроде этого:
template<>
Bar<Key> foo<Bar<Key>>(const string &name);
Я думаю, что это не нарушало бы законы C++ 11 для специализации и переопределения функций. Но все же я не мог найти способ сделать это.
Я предпочитаю не использовать класс вместо функции, чтобы сделать частичную специализацию для реализации этой функции. Есть ли у вас предложение реализовать эту функцию и специализировать ее для возвращаемого значения шаблона?
Edit:
Функция, которую я упомянул в качестве примера специализации не имеет правильный синтаксис, поскольку он имеет неопределенный тип Key
. Я просто пишу это, чтобы показать, что нет возможного решения. Если я пытаюсь полностью определил его как:
template<typename Key>
Bar<Key> foo<Bar<Key>>(const string &name);
компилятор не может скомпилировать его, так как предполагается в качестве частичной функции специализации.
Почему специализироваться? Вы не можете перегрузить его? –
Входной параметр одинаковый во всех функциях. Как я могу перегрузить его? – MohsenTamiz
Какие ошибки вы получаете? – sergico