首页 > 应用开发 > > 帮我在模板里使用enable_if吧
我的目的是在模板里声明一个可重载的函数,用enable_if,根据函数的返回值。
如果是void就是某个函数体,否则是另一个。
我的思考是用result_of获取函数返回类型,多半是在用法上的问题吧,或者难道是VS不支持?
难道返回类型与void比较,用is_same,再用enable_if使这个重载生效或失效。
下面代码没有重载部分,只是演示为什么result_of,总是失败,直接用目标类就可以,把模板参数套入result_of就失败。
using namespace std;
struct foo
{
int func(int) {
return 1;
}
};
template<typename T>
struct wrapper
{
template<typename F>
struct callable {
F func;
callable(F func) :func(func) {}
enable_if<is_same<decltype((new foo()->*&foo::func)(0)), int>::value, int>::type value;
//enable_if<is_same<decltype(&foo::func)(foo,int), int>::value, int>::type value2;
//enable_if<is_same<decltype((new T()->*func(0))), int>::value, int>::type value3;
//typedef result_of<F(T, int)>::type rtype;
};
};
int main()
{
typedef result_of<decltype(&foo::func)(foo, int)>::type functype;
enable_if<is_same<functype, int>::value, int>::type value2 = 100;
wrapper<foo>::callable<decltype(&foo::func)> call(&foo::func);
return 0;
}来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/813/viewspace-3137015/ ,如需转载,请注明出处,否则将追究法律责任。