Имея следующий пример:VARIADIC шаблоны пакет одного шаблонного класса
/* Signal Container */
template <typename Ret> class Signal;
template <typename Ret, typename... Args>
class Signal< Ret (Args...) >
{
/* Following Implementation... */
};
/* Emitter Type */
template < template <typename Ret, typename... Args> Signal< Ret (Args...) > ... Sig>
class Emitter
{
// using Signals = std::tuple<Sig...>;
/* Following Implementation... */
};
/* Signals */
using Signal_A = Signal<void()>;
using Signal_B = Signal<void(int)>;
using Signal_C = Signal<void(int, float)>;
/* Desired Usage */
class MyType : public Emitter<Signal_A, Signal_B, Signal_C>
{
};
Я хотел бы иметь возможность наследовать от Emitter
типа, который принимает 1 (0?) Или более параметров шаблона типа Signal
(и только Signal
). Signal
- это шаблонный тип, и его определение отличается от каждого типа, переданного в пакет аргументов Emitter
.
Я попробовал текущий подход к MinGW, но я получаю эти сообщения об ошибках, и я немного потерял:
/* Line: template < template <typename Ret, typename... Args> Signal< Ret (Args...) > ... Sig> */
main.cpp|15|error: expected 'class' before 'Signal'|
/* Line: template < template <typename Ret, typename... Args> Signal< Ret (Args...) > ... Sig> */
main.cpp|15|error: expected '>' before '<' token|
/* Line: class MyType : public Emitter<Signal_A, Signal_B, Signal_C> */
main.cpp|29|error: wrong number of template arguments (3, should be 1)|
/* Linne: class Emitter */
main.cpp|16|error: provided for 'template<template<class Ret, class ... Args> class Signal> class Emitter'|
Если кто-то может уточнить это или предоставить рабочее решение, которое я был бы благодарен.
Доступные Составители: MinGW GCC 4.9.2 (также 5.1.0)
спасибо. Это то, что я на самом деле закончил. Все, что я хотел, состояло в простой проверке полученных типов в пакете шаблонов. –