C++ 使用另一个命名空间C++;

C++ 使用另一个命名空间C++;,c++,C++,我想在我自己的命名空间中为一些Range-V3函数/函子创建别名。对于像begin、end这样的functor,它只是执行auto-constexpr-begin=::ranges::begin。然而,对于像copy这样的函数,我不确定如何继续。我尝试了使用::ranges::copy()和使用::ranges::copy但两者都不起作用 任何帮助都将不胜感激!我正在做的一个小例子: namespace example::ranges { auto constexpr begin = ::

我想在我自己的命名空间中为一些Range-V3函数/函子创建别名。对于像begin、end这样的functor,它只是执行
auto-constexpr-begin=::ranges::begin
。然而,对于像copy这样的函数,我不确定如何继续。我尝试了
使用::ranges::copy()
使用::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)...);
    }
}
名称空间示例::范围
{
模板
自动开始(Ts&…xs)
noexcept(noexcept(::范围::开始(std::转发(xs)…))
->decltype(::范围::开始(标准::转发(xs)…){
return::ranges::begin(std::forward(xs)…);
}
}

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

< p>不幸的是,没有简单的方法来为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)...);
    }
}
名称空间示例::范围
{
模板
自动开始(Ts&…xs)
noexcept(noexcept(::范围::开始(std::转发(xs)…))
->decltype(::范围::开始(标准::转发(xs)…){
return::ranges::begin(std::forward(xs)…);
}
}

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

什么是
::ranges::copy
?一个函数,一个类,一个类型定义?可能已经有了一个使用
?您只想创建“几个”别名有什么原因吗?否则它将像
名称空间示例{namespace ranges=::ranges;}
使用::ranges::copy不起作用?真的吗?什么是
::ranges::copy
?一个函数,一个类,一个类型定义?可能已经有了一个使用
?您只想创建“几个”别名有什么原因吗?否则它将像
名称空间示例{namespace ranges=::ranges;}
使用::ranges::copy不起作用?真的吗?啊,我希望不是这样。你说的“还”是什么意思?是否计划用于C++20?@brrr语言学家:在Rapperswil中讨论过,但没有达成一致意见。我认为
noexcept
说明符应该出现在尾部返回类型之前。你能修好吗?啊,我希望不会是这样。你说的“还”是什么意思?是否计划用于C++20?@brrr语言学家:在Rapperswil中讨论过,但没有达成一致意见。我认为
noexcept
说明符应该出现在尾部返回类型之前。你能修一下吗?