Невозможно создать функциональный шаблон в C ++ - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь создать класс шаблона, который принимает в качестве параметров шаблона тип возвращаемого значения и параметры функции, например: new static_detour<int(const char*, int)>()

Так как это тот же синтаксис, который мы видим в шаблоне функции std, я попытался скопировать ту же структуру, что и в function.h, так что это мой класс:

template<typename Result, typename ... Arguments>
class static_detour<Result(Arguments...)>
{
}

Однако это не работает, и когда я пытаюсь использовать этот файл из файла .cpp, компилятор выдает error C2988: unrecognizable template declaration/definition. Например, я удаляю <> после имени класса, которое хорошо компилируется, но тогда я не могу использовать параметр Arguments.

Возможно ли это в C ++ или я что-то не так делаю?

1 Ответ

0 голосов
/ 13 сентября 2018

Вам необходимо объявить первичный шаблон класса без ограничений, который определяет количество аргументов шаблона, необходимых классу:

template <class T>
class static_detour;

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

template<typename Result, typename ... Arguments>
class static_detour<Result(Arguments...)>
{
}

Тип static_detour<T> будет относиться к специализации, если T имеет форму Result(Arguments...) для некоторых Result и Arguments..., то есть, если вычет против специализации успешен. В противном случае он будет ссылаться на основной шаблон.

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