【问题标题】:boolean options from boost program options来自 boost 程序选项的布尔选项
【发布时间】:2011-02-24 10:00:30
【问题描述】:

我正在使用 boost 程序选项从命令行参数获取布尔值。我希望将我的论点指定为“Y”、“是”、“N”、“否”。

实际上我的代码使用了一个临时字符串

  1. 将被boost program options解析
  2. 检查了“Y”、“是”、“N”或“否”
  3. 分配给布尔变量成员。

除此之外,我还使用另一个临时字符串来获取默认值。

我做了所有这些工作,因为我尝试了下面的代码但不起作用

      namespace pod = boost::program_options;

      ("Section.Flag", 
           pod::value<bool>(&myFlag_bool)->default_value( false ), 
           "description")

您知道是否可以使用提升程序选项比我使用的选项更好吗?

【问题讨论】:

    标签: c++ boost-program-options


    【解决方案1】:

    您将以一种或另一种方式解析字符串。有几个选项,主要取决于您查询此值的频率。这是一个类似于我最近使用的示例; CopyConstructable 和 Assignable 所以它与 STL 配合得很好。我想我需要做一些额外的事情才能让它与 program_options 一起工作,但你明白了要点:

    #include <boost/algorithm/string.hpp>
    
    class BooleanVar
    {
    public:
        BooleanVar(const string& str)
            : value_(BooleanVar::FromString(str))
        {
        };
    
        BooleanVar(bool value)
            : value_(value)
        {
        };
    
        BooleanVar(const BooleanVar& booleanVar)
            : value_(booleanVar)
        {
        };
    
        operator bool()
        {
            return value_;
        };
    
        static bool FromString(const string& str)
        {
            if (str.empty()) {
                return false;
            }
    
            // obviously you could use stricmp or strcasecmp(POSIX) etc if you do not use boost
            // or even a heavier solution using iostreams and std::boolalpha etc
            if (
                str == "1" 
                || boost::iequals(str, "y")
                || boost::iequals(str, "yes")
                || boost::iequals(str, "true")
            )
            {
                return true;
            }
    
            return false;
        };
    
    protected:
        bool value_;
    };
    

    【讨论】:

    • 感谢您的回复和使用 boost::iequals..我从来没想过。问候 AFG
    • @Abruzzo 如果这个答案解决了你的问题,你应该接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多