我正在构建一个机器学习库,试图从C++的内置功能中获得最大收益,特别是C++ 11。我有各种各样的类执行输入修改,称为Transformations
。现在我想要构建它们的一个管道,将它们一个接一个地链接起来(并且最终在链的最后有一个机器学习算法,如分类器或回归器)。左值和右值的可变参数模板类构造函数
我认为一个具有可变参数模板参数的类是这个用例的完美匹配。关键是我想在构造函数中接受rvalue和lvalues。
在rvalue的情况下,我想移动它,并在左值的情况下,我想保留对它的引用(尽管我仍然不是100%确定这一点,因为它可能是一个引用绑定到某个作用域,并且作为函数结果返回管道将炸毁;但是对于这个库的声明,这可以被记录)。
这将是类:
template <class... Ts>
class Pipeline {
};
template <class T, class... Ts>
class Pipeline<T, Ts...> {
public:
Pipeline(T?? transformation, Ts ??... following) : Pipeline<Ts...>(following...), _transformation(???) {}
...
}
我不知道是否_transformation
应该是一个参考与否,是否std::move
在初始化列表和应该是什么类型T
和Ts
在构造函数。
编辑:在左值的情况下,它应该是非const的,因为管道可以修改转换。
典型的标准库方法是复制一切。需要引用语义的用户可以使用'reference_wrapper'。 –