使用其他命名空间C ++中的函数

时间:2018-10-04 15:50:36

标签: c++

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

1 个答案:

答案 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友好性和重载行为。可以使用宏简化三重运算。