可能重复:
是否可以模拟模板<auto X>?
考虑以下工作代码:
#include <iostream>
template<typename T> struct Traits {};
template<typename T, typename A>
struct Traits<void(T::*)(A)>
{
typedef T Class;
typedef A Arg;
};
template<typename T, typename U, void(T::*MemFun)(U)>
void Builder()
{
std::cout << typeid(T).name() << std::endl;
std::cout << typeid(U).name() << std::endl;
std::cout << typeid(MemFun).name() << std::endl;
}
template<typename T, T arg>
void Builder()
{
return Builder<Traits<T>::Class,Traits<T>::Arg,arg>();
}
class Class
{
public:
void foo(int) { }
};
int main()
{
Builder<decltype(&Class::foo), &Class::foo>();
}
我想做的是这样的事情来获得相同的结果,而不使用宏。
int main()
{
Builder<&Class::foo>();
}
我似乎无法创建一个模板来获取成员的指针并推断出类型。有什么想法吗?指向成员的指针必须用作模板参数而不是函数参数,因为它用于创建模板函数(未显示)。