Я строю библиотеку обучения компьютера, пытаясь получить максимальную отдачу от встроенных функций C++, особенно C++ 11. У меня есть множество классов, которые выполняют модификацию ввода, называемого Transformations
. Теперь я хочу построить конвейер из них, связав их один за другим (и, в конечном итоге, имея в конце цепи алгоритм машинного обучения, например, классификатор или регресс).Конструктор класса шаблонов Variadic с lvalues и rvalues
Я думаю, что класс с параметрами вариационного шаблона идеально подходит для этого варианта использования. Дело в том, что я хочу принимать как rvalues, так и lvalues в конструкторе.
В случае rvalue я хочу переместить его, а в случае lvalue я хочу сохранить ссылку на него (хотя я все еще не уверен на 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
в конструкторе ,
Редактировать: В случае с lvalue он должен быть не const, потому что конвейер может изменить преобразование.
Типичным стандартным подходом к библиотеке является копирование всего. Пользователи, которым нужна эталонная семантика, могут использовать 'reference_wrapper'. –