gpt4 book ai didi

c++ - 仅用于向上转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:10 25 4
gpt4 key购买 nike

我们都知道 C 风格的转换在 C++ 中被认为是邪恶的。这就是为什么它们被 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;
};

但是,这似乎太复杂了,而且由于我不是模板元编程方面的专家,所以我想问一下是否有不同/更好/更简单的方法。

最佳答案

std::forward<T&>将只允许上行:

struct A {};
struct B : A {};
A a;
B b;
auto& x = std::forward<A&>(b); // OK
auto& y = std::forward<B&>(a); // fails
auto* px = std::forward<A*>(&b); // OK
auto* py = std::forward<B*>(&a); // fails

关于c++ - 仅用于向上转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38830333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com