Код: Выделить всё
template
class some_class {
public:
template
some_class(T_&& value) : value_(std::forward(value)) {}
private:
T value_;
};
сравнить со следующим кодом: < /p>
Код: Выделить всё
template
class some_class {
public:
...
private:
std::decay_t value_;
};
В целом, я удивляюсь, правильно ли это дать пользователю. /> Поскольку проблема помечена как «основанная на мнениях», давайте поговорим о определенном требовании к дизайну. < /p>
Код: Выделить всё
class object_pool {
...reuse objects...
};
template
class some_executor {
public:
explicit some_executor() : pool_(...default arguments...) {}
template
explicit some_executor(T&& pool) : pool_(std::forward(pool)) {}
private:
ObjectPool pool_;
};
Все выглядит хорошо, но что, если мы хотим code> то же самое объект. экземпляры? < /p>
Ну, мы можем написать следующий код ... < /p>
Код: Выделить всё
auto op = std::make_shared(...some arguments...);
some_executor executor1(op);
some_executor executor2(op);
...
construal> с этим кодом. И да, с использованием shared_ptr не так уж и плохо, но давайте рассмотрим следующий код:
Код: Выделить всё
object_pool op;
some_executor executor1(std::ref(op));
some_executor executor2(std::ref(op));
...
Так, наконец, мой вопрос: что такое правильный шаблон ? Должны ли мы просто избегать обмена объектом Object_pool ? (Это то, что я имею в виду под «Интересно, правильно ли дает пользователю такую гибкость» ) или мы должны добавить некоторые типа ограничения к шаблону аргумента objectpool ?
Подробнее здесь: https://stackoverflow.com/questions/796 ... y-template