如果类具有某些子类/类型,我们可以知道SFINAE技巧吗?像,
template<typename TYPE> // searches for "my_type"
struct has_inner_type {
enum { value = <???> };
};
以下是示例:
struct A {
class my_type {}; // has_inner_type::value = true
};
struct B { }; // has_inner_type::value = false
struct C { typedef int my_type; }; // has_inner_type::value = true
我尝试了一些技巧,但主要是预期的编译器错误。 用法:
bool b = has_inner_type<A>::value; // with respect to "my_type"
修改:我重新编辑了我的问题,因为似乎无法将my_type
作为第二个参数传递给has_inner_type
。因此,截至目前,问题是仅查找特定类型my_type
。我有tried this code,但不起作用。
答案 0 :(得分:0)
以下是我在问题中发布的维基百科链接中的答案!! (感谢@n.m。)
template <typename T>
struct has_inner_type
{
typedef char yes[1];
typedef char no[2];
template <typename C> static yes& test(typename C::my_type*);
template <typename> static no& test(...);
static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};
这是the demo。