【问题标题】:c++ - Initialize objects inside vector declarationc++ - 在向量声明中初始化对象
【发布时间】:2017-01-11 10:52:19
【问题描述】:

我正在编写一个小型命令行解析库,您可以静态描述选项:

std::vector<Args::Descriptor> description{
    {UNKNOWN, 0,'h' , "help", Args::None, "print this help"}
};

在我的库中,

struct Descriptor {
  const uint option;
  const int  type;
  const char shortopt;
  const char* const longopt;
  const CheckArg check_arg; // Function pointer
  const char* help;
};

然后使用Descriptor来初始化一个类:

Option(const Descriptor *descriptor)
{ … }

我可以通过初始化向量中的选项类来删除我的描述符结构吗?

std::vector<Args::Option> options{
    {UNKNOWN, 0,'h' , "help", Args::None, "print this help"}
};

我的 Option 构造函数应该有什么签名?假设 Descriptor 类完全从代码中消失以简化它。

非常感谢:D

【问题讨论】:

    标签: c++ vector c++14 stdvector


    【解决方案1】:

    这行不通。 Option 的构造函数的参数是一个指向 Descriptor 的指针。 Descriptor 必须来自某个地方。您不能使用类本身的实例来初始化指向类的指针。

    不过,你可以做的是构造一个 Descriptors 的向量,这正是你现在正在做的事情。

    然后,使用指向 Descriptor 向量中各个值的指针初始化 Option 向量。

    只要第一个向量保持不变,这将起作用。

    【讨论】:

    • 是的,这就是我现在正在做的事情。但我在想我可以将 Option 构造函数更改为类似 Option(const uint option, const int type, const char shortopt, const char* const longopt,const CheckArg check_arg, const char* help) {}
    • 是的,你可以这样做。
    • 好吧,没想到会这么简单……谢谢^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2016-02-02
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多