Избегайте экспоненциального роста константных ссылок и ссылочных значений в конструкторе

Я кодирую некоторые шаблонные классы для библиотеки машинного обучения, и я сталкивался с этой проблемой много раз. Я использую в основном шаблон политики, где классы получают в качестве аргументов шаблона политики для различных функций, например:

template <class Loss, class Optimizer> class LinearClassifier { ... }

Проблема в конструкторах. По мере роста количества политик (параметров шаблона) комбинации ссылок на константы и ссылки на значения растут в геометрической прогрессии. В предыдущем примере:

LinearClassifier(const Loss& loss, const Optimizer& optimizer) : _loss(loss), _optimizer(optimizer) {}

LinearClassifier(Loss&& loss, const Optimizer& optimizer) : _loss(std::move(loss)), _optimizer(optimizer) {}

LinearClassifier(const Loss& loss, Optimizer&& optimizer) : _loss(loss), _optimizer(std::move(optimizer)) {}

LinearClassifier(Loss&& loss, Optimizer&& optimizer) : _loss(std::move(loss)), _optimizer(std::move(optimizer)) {}

Есть ли способ избежать этого?

Ответы на вопрос(4)

Ваш ответ на вопрос