考虑以下示例:
如何从
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
有一个签名为 float process(float a, int b)
的方法 process
,那么 Node<T>
的构造函数签名应该如下所示:Node(Input<float> a, Input<int> b)
。如何从
T::process
中提取参数包以在 Node
的构造函数中使用?