Я использую boost :: program_options, и он страдает от того же, что и многие другие библиотеки C ++, даже сам STD: он по-прежнему использует строки с нулевым символом в конце в стиле C, потому что на самом деле никто не любит слабые std::string
.
Рассматриваемый метод:
options_description_easy_init&
operator()(const char* name,
const value_semantic* s,
const char* description);
Типичный вариант использования просто отлично:
options.add_options()
("graphical", bool_switch(&isGraphical)->default_value(false),
"Show any graphical output during runtime")
Однако мне нужно, чтобы имя опции было установлено динамически. Причина в том, что в некоторых случаях мне нужен собственный префикс, который добавляется в строку моей функцией std::string key(const std::string& k)
:
options.add_options()
(key("graphical"), bool_switch(&isGraphical)->default_value(false),
"Show any graphical output during runtime")
Это не удалось.
Теперь я могу использовать c_str () для std :: string, но это зло - я не знаю, как долго program_options хранит переменную и если моя строка все еще жива, когда это необходимо.
Я мог бы также зарезервировать память в буфере и т.д. и передать это. Буфер никогда не освобождается, и он сосет / является злом.
Есть ли что-нибудь еще, что я могу сделать, чтобы обойти беспорядок в стиле C в этой ситуации?