C++ C++;类方法上的typetraits:如果参数为enum,则部分专门化
我的平台是Windows和Visual Studio Express 2012 我有一个模板化方法,如下所示C++ C++;类方法上的typetraits:如果参数为enum,则部分专门化,c++,templates,enums,typetraits,C++,Templates,Enums,Typetraits,我的平台是Windows和Visual Studio Express 2012 我有一个模板化方法,如下所示 struct A { template<class T> void blub(T value); }; 当然,这是失败的,因为这种类型没有专门化。我不知道是什么原因 我想提前得到一个精确的枚举,所以我通常要为枚举派生一个模板专门化 执行以下操作会导致编译失败: template<class T> void A::blub(const typename
struct A
{
template<class T> void blub(T value);
};
当然,这是失败的,因为这种类型没有专门化。我不知道是什么原因
我想提前得到一个精确的枚举,所以我通常要为枚举派生一个模板专门化
执行以下操作会导致编译失败:
template<class T> void A::blub(const typename std::enable_if<std::is_enum<T>::value, T>::type& value) { /* ... */ }
我的结论正确吗?我只是要在电话里演演员?一种解决方法是对类进行模板化,但我不想这样做,因为除了该方法之外,该类还做了很多其他事情。您试图对函数模板进行局部专门化,这是不允许的。改为在返回类型上执行以下操作:
struct A
{
template<typename T>
typename std::enable_if<std::is_enum<T>::value>::type
blub(T value);
// and don't specialize for concrete types,
// just overload:
void blub(std::string value);
void blub(int value);
};
结构A
{
模板
typename std::enable_if::type
blub(T值);
//不要专门研究混凝土类型,
//只是过载:
void blub(标准::字符串值);
无效blub(int值);
};
template<class T> void A::blub(const typename std::enable_if<std::is_enum<T>::value, T>::type& value) { /* ... */ }
A a;
a.blub((int)ENUM_1);
struct A
{
template<typename T>
typename std::enable_if<std::is_enum<T>::value>::type
blub(T value);
// and don't specialize for concrete types,
// just overload:
void blub(std::string value);
void blub(int value);
};