Как улучшить читаемость multi_index_container для программистов, не привыкших к нему? - PullRequest
0 голосов
/ 28 февраля 2020

Я создал многоиндексный контейнер с 3 неуникальными неупорядоченными ключами, похожими на следующие:

namespace bmi = boost::multi_index;
class SurveyRepository {
// some other code
    using SurveyCodeContainer = boost::multi_index_container<
        SurveyCode,
        bmi::indexed_by<
            bmi::hashed_non_unique<bmi::tag<Survey>, bmi::member<SurveyCode, unsigned, &SurveyCode::survey_id>>,
            bmi::hashed_non_unique<bmi::tag<Table>, bmi::member<SurveyCode, unsigned, &SurveyCode::table_id>>,
            bmi::hashed_non_unique<bmi::tag<Check>, bmi::member<SurveyCode, unsigned, &SurveyCode::check_id>>
        >
    >;

    SurveyCodeContainer m_SurveyCodeContainer;
};

Суть в том, чтобы иметь возможность искать SurveyCode объекты, используя любой из этих ключи, и я подумал, что это полностью читабельное и довольно аккуратное решение.

Но был пересмотр кода, и хотя multi_index_container уже использовался в нашей кодовой базе в прошлом, некоторые люди путались с такими комментариями:

Есть ли менее уродливый контейнер?

Так есть ли способ сделать его менее уродливым / более читабельным? Мы используем Visual Studio 2019, и я бы предпочел какое-то решение из stl вместо boost, но я думаю, что нет, верно?

1 Ответ

1 голос
/ 28 февраля 2020

Если вы используете C ++ 17, есть немного более удобный синтаксис :

namespace bmi = boost::multi_index;
class SurveyRepository {
// some other code
   using SurveyCodeContainer = boost::multi_index_container<
        SurveyCode,
        bmi::indexed_by<
            bmi::hashed_non_unique<bmi::tag<Survey>, bmi::key<&SurveyCode::survey_id>>,
            bmi::hashed_non_unique<bmi::tag<Table>, bmi::key<&SurveyCode::table_id>>,
            bmi::hashed_non_unique<bmi::tag<Check>, bmi::key<&SurveyCode::check_id>>
        >
    >;

    SurveyCodeContainer m_SurveyCodeContainer;
};
...