Я кодирую некоторые шаблонные классы для библиотеки машинного обучения, и я сталкиваюсь с этой проблемой много раз. Я использую в основном шаблон политики, в котором классы получают как политики шаблонов шаблонов для разных функций, например:
template <class Loss, class Optimizer> class LinearClassifier { ... }
Проблема заключается в конструкторах. По мере увеличения количества политик (параметров шаблона) комбинации ссылок на константы и ссылки rvalue растут экспоненциально. В предыдущем примере:
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)) {}
Есть ли способ избежать этого?