ITPub博客

首页 > 应用开发 > > 帮我在模板里使用enable_if吧

帮我在模板里使用enable_if吧

作者:llittle 时间:2019-08-20 11:00:24 0 删除 编辑

我的目的是在模板里声明一个可重载的函数,用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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    448
  • 访问量
    4364