В основном это следующий код, который не может передать компилятор (г ++)с использованием повышение :: program_options, как статические члены класса
#include <boost/program_options.hpp>
#include <iostream>
using std::cout;
using std::endl;
namespace po = boost::program_options;
class static_class {
public:
static po::options_description cmd_opt; // here is the definition
};
po::options_description static_class::cmd_opt("dummy");
// the line below cannot pass the compiler !!!
static_class::cmd_opt.add_options()
("help", "show usage info.")
;
main() {
cout << static_class::cmd_opt << endl;
}
Сообщение об ошибке:
test.cpp:16:1: error: ‘cmd_opt’ in class ‘static_class’ does not name a type
Любая идея?
P.S. Я пытаюсь определить разделенный options_description для каждой команды, которую мне нужно обрабатывать в среде с небольшой командной строкой. Я использую bison и flex для анализа среды командной строки. Все аргументы команды будут отправлены в этот статический класс для разбора аргументов.
Поскольку определение аргумента является статическим, я не хочу делать им какие-то структуры данных в стеке (как мне кажется, это быстро и чисто). Я думаю, что этот код будет в порядке, если они не статичны, но что произойдет, если они есть?
Это выглядит немного странно, но просто фантастично! Я попробую позже. –
Я думаю, что добавление статики в фиктивную переменную, что делает ее видимой только в локальном файле еще лучше.При этом одна и та же фиктивная переменная может использоваться в нескольких файлах cpp. –