Рассмотрим следующий пример:
template <class T> class method_traits;
template <class T, class Ret, class... Arg> class method_traits<Ret(T::*)(Arg...)> {
public:
using type = Arg; // this does not work
};
template <class T> using argument_types = typename method_traits<T>::type;
template <class T> class Node {
T t;
public:
Node(Input<argument_types<decltype(&T::process)>>... inputs) { // how do I make this work?
...
}
};
Аргументы конструктора Node<T> зависят от аргументов метода T::process. Поэтому, если тип T имеет метод process подписи float process(float a, int b), подпись конструктора Node<T> должна выглядеть так: Node(Input<float> a, Input<int> b).
Как извлечь пакет параметров из T::process, чтобы использовать его в конструкторе Node?