简体   繁体   English

运算符重载的可变参数模板解包

[英]Variadic Template Unpacking for Operator Overloading

I have an enum, as given below.我有一个枚举,如下所示。 I want to have operator overloading for this enum,.我想对此枚举进行运算符重载。

typedef enum E
{
    A = 1 << 0,
    B = 1 << 1,
    C = 1 << 2,
    D = 1 << 3,
    ANY = A | B | C | D,
}
E;

//Basic version

inline E operator |(E a, E b)
{
    return static_cast<E>(static_cast<int>(a) | static_cast<int>(b));
}

//Templated version
    template<typename T, typename Types>
    inline T operator |(T var1, Types var2) {
        return static_cast<T>(static_cast<unsigned int>(var1) | static_cast<unsigned int>(var2));
    }

    template<typename T, typename... Types>
    inline T operator |(T var1, Types... var2) {
        return static_cast<T>(static_cast<unsigned int>(var2...) | static_cast<unsigned int>(var1));
    }

I am getting following errors我收到以下错误

error: expected ')'
        return static_cast<T>(static_cast<unsigned int>(var2...) | static_cast<unsigned int>(var1));

How do I correct it.我该如何纠正它。

Thanks,谢谢,

TechTotie.技术托蒂。

You can try with你可以试试

template<typename T, typename... Ts>
inline T operator | (T var1, Ts... var2)
{
    return static_cast<T>(  (static_cast<int>(var2) | ...) |  static_cast<int>(var1));
}

But

inline E operator |(E a, E b)
{
    return static_cast<E>(static_cast<int>(a) | static_cast<int>(b));
}

also can solve your problem也可以解决你的问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM