自动(toCast)显式转换是否计划在未来C++标准?



我可能完全偏离了轨道,但是...... 同时使用从 ArrayView 到 Vector 的大量显式转换(我不希望隐含用于明显的静默危险分配),例如:

class MyClass 
{
void SetInts(ArrayView<int> _view) 
{
ints = Vector<int>(_view);
}
Vector<int> ints;
};

我想知道是否计划在未来发布 C++ 时使用这样的语法(因为我们已经得到了自动返回,它做了非常相似的事情):

class MyClass 
{
void SetInts(ArrayView<int> _view) 
{
ints = auto(_view);
}
Vector<int> ints;
};

var = auto(expression)将是一种明确的转换快捷方式。

如果没有,有什么理由不写这样我没有发现的东西吗?

我还没有听说过这样的建议。

。但是您不需要新的语言功能来执行此操作。类似于以下模板的东西应该可以正常工作:

#include <utility>
template <typename T>
class auto_cast
{
T &&source;
public:
auto_cast(T &&source) : source(std::forward<T>(source)) {}
auto_cast(const auto_cast &) = delete;
auto_cast &operator=(const auto_cast &) = delete;
template <typename U, typename = decltype(U(std::forward<T>(source)))>
operator U()
{
return U(std::forward<T>(source));
}
};
template <typename T> auto_cast(T &&) -> auto_cast<T>;

用法:ints = auto_cast(_view);

如果没有,有什么理由不写这样我没有发现的东西吗?

是的,它充其量是尴尬的,最坏的情况是模糊的。

ints = auto(_view);

它看起来像函数调用,但使用关键字?

ints = Vector<int>(_view);

在这里,我们可以确切地看到发生了什么,可能逃避复制分配的构造。

最新更新