Шаблон команды C ++ с большим количеством параметров - PullRequest
0 голосов
/ 12 октября 2018

Я реализую реализации шаблонов команд с большим количеством действий и параметров.Для упрощения я планирую использовать класс, который может содержать все возможные параметры модуля на карте.

class ParamBag {
public:
    add(int paramId, shared_ptr<IParam> param);
    bool contains(int paramId);
    std::shared_ptr<IParam> get(paramId);

private:
    int mask;
    std::map<int, std::shared_ptr<IParam>> params;
};

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

1 Ответ

0 голосов
/ 12 октября 2018

Если тот, кто использует параметр после get, знает тип параметра, то вы можете использовать c ++ 17 std::any, или если вам нужно использовать c ++ 11, вы можете попробовать boost::any, или еслини один из тех, к которым вы можете прибегнуть к void*.

Разница в том, что void * не прервется при приведении к неверному типу, где any_cast выдаст исключение или вернет nullptr, если используетсяс указателем.Вам также необходимо использовать пользовательский удалитель в std :: shared_ptr, чтобы иметь возможность освободить пустоту *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...