Специализация шаблона функции с заранее объявленным типом - PullRequest
0 голосов
/ 13 декабря 2018

Не удалось найти дубликат.

Можно ли заранее объявить тип, используемый в специализации функции?

Рассмотрим следующий код:

в .ч

template <typename T>
T* Foo()
{
    //generic implementation
}

template<>
class SpecialT* Foo<class SpecialT>();

в .cpp

#include "SpecialT.h"

template<>
SpecialT* Foo<SpecialT>()
{
    //specialized implementation
}

Существует ли какой-либо синтаксис, в котором вышеизложенное возможно и нене приводит к множеству ошибок компилятора (C2910, C2909, C2768 и т. д.)?

Это, конечно, компилируется, если в заголовок шаблона включен "SpecialT.h".

1 Ответ

0 голосов
/ 13 декабря 2018

Простой обходной путь - просто поместить предварительную декларацию в собственную строку:

class SpecialT;
template<>
SpecialT* Foo<SpecialT>();

VS 2015 для Godbolt принимает это просто отлично.

...