+-

假设,我有一个使用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 – 是否可以将引用传递给可变参数模板函数? - 乐贴网