【问题标题】:C++0x variadic template pass by referenceC++0x 可变参数模板通过引用传递
【发布时间】:2011-06-15 17:12:21
【问题描述】:

我想为我的应用程序使用可变参数模板功能,但我不希望对象按值传递(因为在我的情况下对象非常复杂)。我想通过引用传递它们(而不是作为指针)。

void func()
{
}

template<typename Function1, typename... FurtherFunctions>
void func(Function1 f1, FurtherFunctions... further_functions)
{
    // doing some processing here...
}

如何通过引用传递参数并确保它们不被复制?

【问题讨论】:

    标签: c++ templates c++11


    【解决方案1】:

    只要说:

    template <typename ...Args>
    int myfunction(Args & ... args)
    {
      /* ... */
    }
    

    const Args &amp; ... argsArgs &amp;&amp; ... args 等也一样。

    【讨论】:

    • Args & 和 Args && 有什么区别?
    • Args &amp;&amp; 是一个右值引用,您永远不需要在自己的代码中编写它。我只是提到它,因为它存在,您可能偶尔会see it
    • 实际上&amp;&amp; 在这里很有意义,因为您可能想要使用std::forward
    • @Alexandre:嗯,我不确定,你不能通过 not 使用右值引用来破坏任何东西(不要说“auto_ptr”)。如果 OP 想通过引用传递东西,她很可能想修改现有对象,所以让我们保持安全。而且,如果您了解右值和前向,则无论如何您都可以填补空白……一次一步,是吗? :-)
    • 当然你是对的。如果您不打算使用std::forward,那么通过引用传递是完全可以的。让我补充一下,完美转发是 C++0x 最令人愉悦的特性之一,即使它是最难掌握的特性之一,也是了解它的绝佳机会。
    猜你喜欢
    • 2016-10-10
    • 2011-03-16
    • 2011-11-12
    • 1970-01-01
    • 2011-04-21
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多