Частичная спецификация шаблонаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Частичная спецификация шаблона

Сообщение Anonymous »


У меня есть следующий класс шаблона, похожий на оболочку функции:

с использованием MethodId = std::uint16_t; шаблон класс BaseMethod { публика: BaseMethod(const Func &func, std::uint16_t Method_id): _function(func), _method_id(method_id) {} шаблон autooperator()(Args... args) -> decltype(_function(std::forward(args)...)) { return _function(std::forward(args)...); } шаблон автоматический вызов (Args... args) -> decltype(_function(std::forward(args)...)) { return _function(std::forward(args)...); } частный: Функ _функция; Идентификатор метода _идентификатор_метода; }; с этим шаблоном класса я могу использовать вот так:

int adder(int x, int y){return x+y;} BaseMethod foo_tempalte(adder, 0); но я также хочу поддержать такое использование:

BaseMethod bar_tempalte(adder, 0); Поэтому я добавляю частичную версию спецификации:

template класс BaseMethod { публика: BaseMethod(Ret (*func)(Args...), std::uint16_t метод_id): _function(func), _method_id(method_id) { } Оператор Ret()(Args... args) { return _function(std::forward(args)...); } Ret вызова(Args... args) { return _function(std::forward(args)...); } частный: Ret (*_function)(Args...); std::uint16_t _method_id; }; но когда я вызвал BaseMethod bar_tempalte(adder, 0);

IDE выдала мне ошибку: слишком много аргументов для шаблона класса «BaseMethod»

Интересно, что не так с моим кодом? Спасибо!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»