Код: Выделить всё
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);
...
Код: Выделить всё
object_pool op;
some_executor executor1(std::ref(op));
some_executor executor2(std::ref(op));
...
Так, наконец, мой вопрос: что такое правильный шаблон ? Должны ли мы просто избегать обмена объектом Object_pool ? (Это то, что я имею в виду под "Интересно, правильно ли это дать пользователю эту гибкость" ) или мы должны добавить какой-то тип ограничения к шаблону аргументации объект-objectpool ? potentially harmful usage problems, I'm considering the following code:
- Declare a template class object_pool_wrapper without definition and define a template specialization object_pool_wrapper
Код: Выделить всё
template
class object_pool_wrapper;
template
class object_pool_wrapper {
public:
template
object_pool_wrapper(T&& pool) : pool_(std::forward(pool)) {}
object_pool& value() { return pool_; }
private:
object_pool pool_;
};
- Изменить пул участников _ of acexecutor type object_pool_wrapper
Код: Выделить всё
template
class some_executor {
public:
explicit some_executor() : pool_(...default arguments...) {}
template
explicit some_executor(T&& pool) : pool_(std::forward(pool)) {}
private:
object_pool_wrapper pool_;
};
Определите специализацию шаблона object_pool_wrapper для поддержки общего объекта object_pool .
Код: Выделить всё
template
class object_pool_wrapper {
...
};
Код: Выделить всё
some_executor executor1(...);
Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-a-temp