我们都知道在C++中,C-style转换是被认为是不好的。因此,它们被
然而,似乎没有内置的语法来执行显式向上转换:一种在不允许反向转换的情况下明确执行
尽管我知道这是一个非常小的角落案例(大多数时候,隐式转换都可以正常工作),但我想知道在用户代码中实现这样的转换有哪些技术可用。我正在考虑类似以下方式的东西:
然而,那似乎太复杂了,而且由于我不是模板元编程的专家,我想问是否有不同/更好/更简单的方法。
const_cast<>
、static_cast<>
和dynamic_cast<>
所取代,以提供更多定制的转换,允许程序员只允许预期的类转换。到目前为止,一切都很好。然而,似乎没有内置的语法来执行显式向上转换:一种在不允许反向转换的情况下明确执行
Base& baseRef = derived
隐式转换的方法。尽管我知道这是一个非常小的角落案例(大多数时候,隐式转换都可以正常工作),但我想知道在用户代码中实现这样的转换有哪些技术可用。我正在考虑类似以下方式的东西:
template<class T>
class upcast {
public:
template<class U, typename = typename std::enable_if<std::is_convertible<U, T>::value>::type>
upcast(U value) : value(value) {}
operator T() { return value; }
private:
T value;
};
然而,那似乎太复杂了,而且由于我不是模板元编程的专家,我想问是否有不同/更好/更简单的方法。
dynamic_cast
进行向上转型始终成功,而错误的向下转型在使用引用时会抛出std::bad_cast
异常。 - TartanLlamaupcast<Base&>(my_derived);
,但这不是upcast<Derived&>(my_base);
。也就是说,他们想要禁止向下转型。 - TartanLlama