【发布时间】:2013-03-17 10:50:33
【问题描述】:
假设,我有一个使用 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);
};
然后想通过可变参数模板成员使用
container c( /* args for ctor */ );
my_task::spawn(c,0);
这里发生的是spawn() 创建容器的副本,而不是通过引用传递原始容器。有没有办法强制引用?
【问题讨论】:
-
std::ref应该可以解决这个问题,不是吗? -
确实如此。谢谢。 PS。将接受 1 行答案。聚苯乙烯。 10 分钟内(之前不允许 :-(
标签: c++ c++11 pass-by-reference variadic-templates