基本上它是下面的代碼,它可以不通過編譯器(克++)使用boost :: 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文件中。 –