相关疑难解决方法(0)

可以使用type_traits/SFINAE来查找类是否定义成员TYPE?

我已经看到这个问题允许人们检查是否存在成员函数,但我试图找出一个类是否有成员类型.

在下面的示例中,两者都评估为"false",但我想找到一种方法,以便has_bar<foo1>::value计算为false,并has_bar<foo2>::value计算为true.

这可能吗?

#include <iostream>

struct foo1;
struct foo2 { typedef int bar; };

template <typename T>
class has_bar
{
    typedef char yes;
    typedef long no;

    template <typename C> static yes check( decltype(&C::bar) ) ;
    template <typename C> static no  check(...);
public:
    enum { value = sizeof(check<T>(0)) == sizeof(yes) };
};

int main()
{
    std::cout << has_bar<foo1>::value << std::endl;
    std::cout << has_bar<foo2>::value << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:实施专业化以回应以下答案: …

c++ sfinae template-meta-programming c++11

14
推荐指数
2
解决办法
6119
查看次数

标签 统计

c++ ×1

c++11 ×1

sfinae ×1

template-meta-programming ×1