我想为我自己的命名空间中的一些Range-V3函数/功能创建别名。对于开始,结束之类的函子,它只是在执行auto constexpr begin = ::ranges::begin
。但是,对于像复制这样的功能,我不确定如何进行。我已经尝试过using ::ranges::copy();
和using ::ranges::copy;
,但都没有用。
任何帮助将不胜感激!我正在做的一个小例子:
namespace example::ranges
{
auto constexpr begin = ::ranges::begin;
auto constexpr end = ::ranges::end;
auto constexpr size = ::ranges::size;
using ::ranges::copy(); // Doesn't work
}
答案 0 :(得分:3)
不幸的是,还没有直接的方法为C ++中的函数创建别名(尚未)。最好的选择是创建一个完美转发的包装器:
namespace example::ranges
{
template <typename... Ts>
auto begin(Ts&&... xs)
-> decltype(::ranges::begin(std::forward<Ts>(xs)...))
noexcept(noexcept(::ranges::begin(std::forward<Ts>(xs)...))) {
return ::ranges::begin(std::forward<Ts>(xs)...);
}
}
这将尽可能地接近原始功能,并保持其noexcept
风格,SFINAE友好性和重载行为。可以使用宏简化三重运算。