首页新闻找找看学习计划

帮我在模板里使用enable_if吧

0
悬赏园豆:30 [待解决问题]

我的目的是在模板里声明一个可重载的函数,用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; }
fyter的主页 fyter | 初学一级 | 园豆:172
提问于:2017-03-13 11:57
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册