Какой лучший шаблон дизайна лучше всего владеет или не владеет шаблонным членом? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Какой лучший шаблон дизайна лучше всего владеет или не владеет шаблонным членом? [закрыто]

Сообщение Anonymous »

Я сталкиваюсь с проблемой дизайна, рассмотрите следующий код: < /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_;
};
Мы можем создать новый come_executor через его конструктор по умолчанию, что также означает, что новый Object_pool также инициализируется. Кроме того, мы также можем сделать это: some_executor (std :: move (op)) , который перемещает предварительно инициализированный Object_pool oke_executor .
Все выглядит хорошо, но что, если мы хотим code> то же самое объект. экземпляры? < /p>
Ну, мы можем написать следующий код ... < /p>

Код: Выделить всё

auto op = std::make_shared(...some arguments...);

some_executor executor1(op);
some_executor executor2(op);
...
Я знаю, что мы должны сделать что -то большее, чтобы сделать некоторую_executor работать должным образом [/b] с помощью t и std :: shared_ptr , но давайте просто игнорируем это на данный момент. зависит от аргумента шаблона. И да, с использованием shared_ptr не так уж и плохо, но давайте рассмотрим следующий код:

Код: Выделить всё

object_pool op;

some_executor executor1(std::ref(op));
some_executor executor2(std::ref(op));
...
это вредно и может легко сбое из -за ошибок памяти. С точки зрения A библиотечного дизайнера , используя shared_ptr или t & , является функционально эквивалент ; Мы просто не определили правильный шаблон для некоторого_EXECUTOR , чтобы подтвердить, владеет ли он Object_pool или нет.
Так, наконец, мой вопрос: что такое правильный шаблон ? Должны ли мы просто избегать обмена объектом 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_;
};
Таким образом, ofe_executor принимает право собственности на пул _ без сомнения. Но вы не можете поделиться Object_pool прямо сейчас.

Определите специализацию шаблона object_pool_wrapper для поддержки общего объекта object_pool .

Код: Выделить всё

template
class object_pool_wrapper {
...
};

Таким образом, мы можем использовать shared_ptr as ObjectPool .

Код: Выделить всё

some_executor executor1(...);
Таким образом, мы явно завершаем ответственность за управление пулом объектов Time Lifeting в Object_pool_wrapper . Любой, кто хочет использовать тип, помимо Shared_ptr для обмена объектом Object_pool , должен определить соответствующую специализацию шаблона Object_pool_wrapper и, таким образом, снизить риск опасных операций. some_executor , что приводит к чистому API.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-a-temp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Какой лучший шаблон дизайна лучше всего владеет или не владеет шаблонным членом? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Pimpl Idiom против мостового дизайна дизайна
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с шаблонным HTML в папке шаблонов Django.
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с шаблонным HTML в папке шаблонов Django.
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Проблема со статусом 204 с шаблонным методом OpenAPI с использованием NSwag в Visual Studio
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»