比方說,我們有這樣一個例子類:類型轉換操作符任何算術類型,除了一些參考
class Union {
union Value {
int i;
float f;
};
enum class Type {
Int, Float
};
Type type;
Value value;
public:
operator int&() { return value.i; }
operator float&() { return value.f; }
template <typename T, is_arithmetic<T>>
operator T() const {
if (type == Type::Int)
return static_cast<T>(value.i);
else
return static_cast<T>(value.f);
}
}
我想允許聯盟實例被強制轉換爲任何算術類型但禁止進行鑄造,除了引用有些像例子中的int和float類型。對於給定示例,編譯器會通知現有的多個轉換。如何處理這樣的問題?它甚至有可能嗎?
我寫的is_arithmetic的方式更像僞代碼,不會使用不必要的代碼膨脹示例。我會提出解決方案,我在答案中作出。 –
但我感謝您對模板的解釋。 –