【发布时间】:2015-09-17 22:50:48
【问题描述】:
这是对我的问题SFINAE with variadic templates 的跟进。我试图构建一个名为has_member 的可变参数模板来检查一个类是否有一个成员(称为member)。
我尝试查看是否可以在该问题的答案中使用size_t 而不是void,并且不使用可变参数模板,如下所示:
#include <iostream>
#include <vector>
using namespace std;
class ClassWithMember
{
public:
int member;
};
class ClassWithoutMember
{
};
template <typename T,typename=size_t>
class has_member: public std::false_type
{
};
template <typename T>
class has_member<T,decltype(sizeof(typename T::member))>: public std::true_type
{
};
template <typename T1,
std::enable_if_t<has_member<T1>::value>* = nullptr>
void my_function(const T1& obj) { cout<<"Function for classes with member"<<endl; }
template <typename T1,
std::enable_if_t<!has_member<T1>::value>* = nullptr>
void my_function(const T1& obj) { cout<<"Function for classes without member"<<endl; }
int main()
{
ClassWithMember objWithMember;
ClassWithoutMember objWithoutMember;
my_function (objWithMember);
my_function (objWithoutMember);
}
我没有收到任何错误,但从未使用过专业化。只有没有成员的类的函数被调用。有人可以解释一下原因吗?
【问题讨论】: