簡體   English   中英

運算符重載的可變參數模板解包

[英]Variadic Template Unpacking for Operator Overloading

我有一個枚舉,如下所示。 我想對此枚舉進行運算符重載。

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));
    }

我收到以下錯誤

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

我該如何糾正它。

謝謝,

技術托蒂。

你可以試試

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

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

也可以解決你的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM