加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何使用enable_if根据类的template参数启用成员函数

发布时间:2020-12-16 05:19:37 所属栏目:百科 来源:网络整理
导读:代码: templateclass Tstruct is_builtin{ enum {value = 0};};templatestruct is_builtinchar{ enum {value = 1};};templatestruct is_builtinint{ enum {value = 1};};templatestruct is_builtindouble{ enum {value = 1};};templateclass Tstruct My{ ty
代码:
template<class T>
struct is_builtin
{
    enum {value = 0};
};

template<>
struct is_builtin<char>
{
    enum {value = 1};
};

template<>
struct is_builtin<int>
{
    enum {value = 1};
};

template<>
struct is_builtin<double>
{
    enum {value = 1};
};

template<class T>
struct My
{
    typename enable_if<is_builtin<T>::value,void>::type f(T arg)
    {
        std::cout << "Built-in as a param.n";
    }


    typename enable_if<!is_builtin<T>::value,void>::type f(T arg)
    {
        std::cout << "Non - built-in as a param.n";
    }
};

struct A
{
};

int main()
{
    A a;
    My<int> m;
    My<A> ma;
    m.f(1);
    ma.f(a);
    return 0;
}

我收到一个错误:

error C2039: 'type' : is not a member of 'std::tr1::enable_if<_Test,_Type>'

显然我不明白如何使用enable_if.我在想的是,我可以在编译时从一组成员函数启用一个或第二个成员函数,但是它不起作用.任何人都可以向我解释如何正确执行?
编辑
我真的不明白的是为什么在其中一个def没有typedef.编译器找不到它,它不会编译它.

解决方法

您不能使用类模板参数来获取成员函数的SFINAE.

你要么需要

>使成员函数改为成员函数模板,并在成员函数模板的模板参数上使用enable_if>将成员函数f移动到策略类中,并使用enable_if专门化类模板.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读