正在转发参数

Forwarding arguments

本文关键字:参数 转发      更新时间:2023-10-16

我有一个形式为的构造

template<class T>
    void do_something_with_it(T*&& ptr)
    {
//here I can do something with this ptr
    }
    template<class T,class... Args>
    void do_something_with_them(T*&& ptr, Args&&... args)
    {
        do_something_with_it(std::forward<T&&>(ptr));
        do_something_with_them(std::forward<Args&&>(args)...);
    }

但出于某种原因,我不能提出这些论点。有办法做到吗
我使用的是gcc 4.6.1。

很可能会出现编译时错误,因为T*&&不是一个完美的转发工具。只有T&&是。所以ptr参数只接受右值。除此之外,你的std::forward<T&&>应该是std::forward<T*>,但当然,现在你有了另一个错误,这就无关紧要了。除了对do_something_with_them的调用没有命中零参数的do_something_with_them的基本情况之外,因为如果args为空。。。

如果您真的只想接受指针,那么可以使用enable_ifis_sameis_convertible。但我当然不认为这是"转发"了。呢

template<typename T, typename ...Args>
auto do_something_with_them(T&&t, Args&&...args)
  -> decltype(do_something_with_it(std::forward<T>(t)))
{ ... }

通过这种方式,您可以让do_something_with_it决定它是否接受参数(如果您愿意,您也可以将递归调用放入decltype中。我把它留给读者练习,让读者了解这里可能需要什么运算符)。当然,do_something_with_it也有同样的问题——不通用。