我正在構建一個機器學習庫,試圖從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'。 –