我想添加一个新的构造现有类,不知道如果我能以某种方式做一个emplace的初始化optional,然后在初始化另一个成员值使用该值.
例如:
class sample {
my_type sc;
optional<opt_type> run;
sample() :
sc( gen_default() ) {
}
enum ctor_alt { ctor_alt };
sample( ctor_alt ) :
emplace( run, ctor_arg ), /* Possible somehow? */
sc( run.field ) {
}
Run Code Online (Sandbox Code Playgroud)
我的主要动机是我不想改变它的类型my_type.这个变量有很多用户并将它放在一个包装器中需要更改很多代码.
emplace是一个成员函数,在构造对象之前不能执行成员函数(除非你是对象的构造函数).但是如果你想构建一个optional<T>就地,你可以简单地使用std::in_place构造函数:
run( std::in_place, ctor_arg )
Run Code Online (Sandbox Code Playgroud)
但是,成员初始化程序始终按声明成员的顺序执行,而不是成员初始化程序列表中的顺序(如果您按顺序初始化它们,编译器应该发出警告).因此,如果要使用较早的初始值设定项来初始化以后的变量,则必须在声明中正确排序它们:
optional<opt_type> run;
my_type sc;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |