Другой альтернативой является создание простого класса инициализатора:
list <string> Foo::s_List;
struct Init {
Init() {
Foo::s_List.insert("apple");
Foo::s_List.insert("bannana");
Foo::s_List.insert("grapes");
}
};
static Init doInit;
Обратите внимание, что, поскольку список является закрытым, это, вероятно, потребует от вас сделать Init другом Foo. Также часто бывает удобно, чтобы такие классы содержались в классе, который они инициализируют.
Однако я просто перечитал ваш вопрос и возникла другая мысль - если список постоянный, вы, вероятно, не будете его изменять, и в этом случае простой массив строк, инициализированный со строками в отсортированном порядке, может лучшее решение. Конечно, поиск будет быстрее (с использованием std :: binary_search), чем в списке, и, конечно, его легко инициализировать.