【发布时间】:2016-05-01 05:16:54
【问题描述】:
我正在构建一个机器学习库,试图充分利用 C++ 的内置特性,尤其是 C++11。我有多种类可以修改输入,称为Transformations。现在我想构建它们的管道,将它们一个接一个地链接起来(最终在链的末端有一个机器学习算法,如分类器或回归器)。
我认为具有可变模板参数的类是这个用例的完美匹配。问题是我想在构造函数中同时接受右值和左值。
在右值的情况下我想移动它,在左值的情况下我想保留对它的引用(尽管我仍然不能 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的类型应该是什么。
编辑:在左值的情况下,它应该是非常量,因为管道可以修改转换。
【问题讨论】:
-
典型的标准库方法是复制所有内容。需要引用语义的用户可以使用
reference_wrappers。
标签: c++ c++11 variadic-templates rvalue-reference lvalue