c++ - 枚举模板

标签 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:运算符 & 不明确

最佳答案

Error C2593: Operator & is ambiguous

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

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

关于c++ - 枚举模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17361771/

相关文章:

c++ - 作为模板类成员的模板类的特化

c++ - 自定义Vector类,像c++中的数组一样返回 vector

c++ - 声明一个与给定模板参数的函数具有相同签名的函数

c++ - 如何定义可变参数模板的参数?

C++算法压缩比计算

c++ - 依赖注入(inject)库的正确比喻是什么?

c++ - 以下模板特化代码是非标准的还是 VS-C++ 中的错误?

c++ - 在 Cython 中处理 C++ 数组(使用 numpy 和 pytorch)

C++,类构造函数中参数名称后的&符号

c++ - 理解 c++11 右值、 move 语义和性能