+-
c – 是否可以将引用传递给可变参数模板函数?
假设,我有一个使用CRTP的基类并提供一个可变参数模板静态成员函数

template<typename derived_task>
struct task_impl : library::task
{
   /* some useful functionality implemented using CRTP */
   /// static method for spawning a task.
   template<typename... Args>
   static void spawn(Args... args)
   { library::spawn(new task(args...)); }
 };

和派生类

struct my_task : task_impl<my_task>
{
  /* implementation using functionality of task_impl<> */
  my_task(container&c, int i);
};

然后想要使用variadic模板成员via

container c( /* args for ctor */ );
my_task::spawn(c,0);

这里发生的是spawn()创建容器的副本,而不是通过引用传递原始容器.有没有办法强制执行参考?

最佳答案
你有两个选择,要么用reference_wrapper包装参数,所以函数调用复制reference_wrapper而不是它引用的对象,或者让你的可变参数函数使用完美转发,这样它就可以通过引用传递参数:

template<typename... Args>
 static void spawn(Args&&... args)
 { library::spawn(new task(std::forward<Args>(args)...)); }
点击查看更多相关文章

转载注明原文:c – 是否可以将引用传递给可变参数模板函数? - 乐贴网