枚举的模板

时间:2013-06-28 09:45:01

标签: c++ templates c++11

如何为所有枚举专门化模板。 就像它boost::serialization一样。

提升:

template <typename Archive>
void serialize(Archive &AR, const unsigned int ver)
{
AR & enum__;
AR & int__;
AR & class__;
}

我需要operator&所有枚举:

struct A
{
void operator&(int obj){std::cout << "1";}
void operator&(unsigned int obj){std::cout << "2";}

template <typename T>
typename std::enable_if<std::is_enum<T>::value,void>::type operator&(T & obj) { std::cout << "Is enum" << std::endl; }

template<typename T>
void operator&(T & obj){obj.metod(); std::cout << "3";} // this operator not for enums
};

enum enum__{AAA,BBB};
enum enum2__{AAA2,BBB2};

int main()
{
A a;
enum__ d = AAA;
a & d;

enum2__ e = AAA2;
a & e;

std::system("pause");
return 0;
}

错误C2593:操作员&amp;含糊不清

1 个答案:

答案 0 :(得分:1)

  

错误C2593:操作员&amp;含糊不清

假设您将枚举类型传递给operator&。然后编译器将生成具有相同函数参数的两个版本的operator&。这就是为什么你有一个模棱两可的错误。您应该为非枚举添加模板专业化:

template<typename T>
typename std::enable_if<!std::is_enum<T>::value,void>::type
operator&(T & obj)
{
    obj.metod();
    std::cout << "3";
}