У меня есть контейнер boost::multi_index::multi_index_container
с шестью разными индексами ordered_non_unique
. Идея состоит в том, чтобы иметь возможность сортировать данные по этим шести индексам (как средство ранжирования решений с использованием нескольких критериев).
Проблема, с которой я сталкиваюсь, заключается в получении индексов в цикле. Boost требует, чтобы я использовал следующий синтаксис, чтобы получить (скажем) 4-й индекс:
const result_multi::nth_index<1>::type &legs_index = result.get<4>();
Что я пытаюсь сделать, так это поместить приведенный выше оператор в цикл, который работает от 0 до 5, чтобы я мог использовать один и тот же код для всех шести индексов. Конечно, следующий фрагмент кода не скомпилируется:
for (size_t i = 0; i < 5; ++i) {
const result_multi::nth_index<1>::type &index = result.get<i>();
...
... Display result sorted along the i-th index
...
}
Поскольку get<i>
— это шаблон, который необходимо определить во время компиляции.
Как я могу использовать вышеуказанную функциональность, чтобы мне не нужно было дублировать код 6 раз? Кажется, boost:preprocessor
может помочь в этом, но я не могу точно понять, как его использовать - любые указатели будут очень признательны!
EDIT: я был бы очень признателен за решение, отличное от C++ 11, чтобы дополнить отличный ответ, используя его. (По нетехническим причинам я вынужден использовать устаревшую версию gcc).