【发布时间】:2014-04-14 21:00:01
【问题描述】:
我正在使用可变参数模板,我想找到解压参数的好方法
template <typename kernel_type, typename ...kernel_types>
class MetaKernel : public MyKernel<kernel_type, kernel_types...> {
public:
MetaKernel (
unsigned int m,
unsigned int n,
const kernel_type& kernel_,
const kernel_types&... kernels_
) :
MyKernel<kernel_type, kernel_types...>(m, n)
{
Ks.set_max_size(sizeof...(kernel_types));
Ks.set_size(sizeof...(kernel_types));
// for each kernels_, add a MyObsKernel to Ks
// Ks[sizeof...(kernel_types)].reset((new MyObsKernel<kernel_type, kernel_types...>(kernels_, prototypes_, m, n))...);
}
private:
array < scoped_ptr < MyObsKernel<kernel_type, kernel_types...> > > Ks;
}
从文档 (http://en.cppreference.com/w/cpp/language/parameter_pack) 中,我看到了如何像这样解包:
int dummy[sizeof...(Ts)] = { (std::cout << args, 0)... };
但是当我正在处理 scoped_ptr 表时,我需要使用“重置”来初始化它。所以我的解决方案不起作用。如何使用 scoped_ptr 解压缩参数?
感谢您的帮助, 杰罗姆
【问题讨论】:
-
你上面的课不完整。
Ks是会员吗?是什么类型的?是std::array吗?如果是这样,它的大小在哪里?你想reset()Ks的每个元素吗? -
是的,Ks 是 MetaKernel 类的成员。它是 scoped_ptr 的 dlib 数组,在初始化这样的对象时,我需要重置内容。 (我添加了大小初始化步骤)