[英]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.