使用另一个命名空间中的函数C++

Using function from another namespace C++

本文关键字:函数 C++ 命名空间 另一个      更新时间:2023-10-16

我想在我自己的命名空间中为一些 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
}  

不幸的是,目前还没有直接的方法可以为C++中的函数创建别名。最好的选择是创建一个完美转发的包装器:

namespace example::ranges
{
template <typename... Ts>
auto begin(Ts&&... xs)                   
noexcept(noexcept(::ranges::begin(std::forward<Ts>(xs)...))) 
-> decltype(::ranges::begin(std::forward<Ts>(xs)...)) {
return ::ranges::begin(std::forward<Ts>(xs)...);
}
}

这将尽可能接近原始函数,保留其noexcept性、SFINAE 友好性和重载行为。三重可以使用宏简化。