Рассмотрим следующий пример:
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
?