gpt4 book ai didi

c++ - 在C++中,如何在类中初始化一个不可复制的静态成员变量?

转载 作者:行者123 更新时间:2023-11-28 06:06:24 25 4
gpt4 key购买 nike

我在这里模仿代码:http://www.boost.org/doc/libs/1_59_0/doc/html/program_options/tutorial.html#idp343130416 .我想重写一个类中的代码,使用静态成员来实现功能。

但是,我发现我无法在类中初始化不可复制的静态成员变量。比如在类中,下面的代码是行不通的:

class ProgramOptions{
private:
static po::options_description config("Generic options");
}
// Possible reason: visual studio treat it as function declaration.

class ProgramOptions{
private:
static po::options_description config = po::options_description config("Generic options");
}
// Possible reason: in C++, only the int type can be done this way.
// For other types, static variable can't be evaluated where it's declared.

class ProgramOptions{
private:
static po::options_description config;
static void InitializeSaticMemberVariables()
{
generic = po::options_description("Generic options");
}
}
// warning C4512: assignment operator cannot be generated.
// Possible reason: options_description is not copyable and the operator = has been intentionally disabled.

我找了很多页都没有解决。我应该怎么办?

我不想以非静态方式管理成员,因为有很多程序选项实例很奇怪。

最佳答案

如果您的编译器支持 C++11 和大括号初始化,第一个替代方案应该可行:

static po::options_description config{"Generic options"};

请注意,您还需要实际定义变量。


可以使用第二个变体,但您在定义中初始化变量:

class ProgramOptions{
private:
static po::options_description config;
...
};

...

po::options_description ProgramOptions::config = po::options_description config("Generic options");

但是,这打破了不可复制点,因为它将使用复制构造函数。

关于c++ - 在C++中,如何在类中初始化一个不可复制的静态成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com