我创建了一个具有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的解决方案,但我想没有解决方案,对吧?
[如果您使用的是C ++ 17,则有slightly more convenient syntax可用:
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;
};