当前位置: 首页 > 知识库问答 >
问题:

如何在添加自定义配置的同时保留默认配置?

缪嘉志
2023-03-14

如果我没有在结构中定义构造函数,我可以通过如下方式选择某个值来初始化它:

struct Foo {
    int x, y;
};

Foo foo = {.y = 1};

但是如果我添加新的默认构造函数,那么我就会失去这个功能:

struct Bar {
    int x, y;
    Bar(int value) : x(value), y(value) {}
};

Bar bar1 = 1;
Bar bar2 = {.y = 2}; // error: a designator cannot be used with a non-aggregate type "Bar"

两种方式都有可能吗?

我尝试添加默认构造函数Bar () {},但似乎也不起作用。

共有3个答案

雍飞雨
2023-03-14

到目前为止,这是我能找到的最接近的东西:

struct Vec2 {
    int x, y;
};

struct Bar {
    int x, y;
    Bar(int value) : x(value), y(value) {}
    Bar(Vec2 value) : x(value.x), y(value.y){};
};

Bar bar1 = 1;
Bar bar2 = {{.y = 2}};

但是你需要使用双参数

慕容星晖
2023-03-14

类似于ellipticaldoor所写的:

struct FooBase {
    int x = 0, y = 0;
};

struct Foo : FooBase {
    Foo(int x_) : FooBase{.x = x_} { }
    Foo(FooBase &&t) : FooBase{t} {}
};

Foo foo = {{.y = 1}};
Foo foo2{1};
单于轶
2023-03-14

你不能既有蛋糕又吃。如果对象具有构造函数,则它不再是聚合,只能使用指定的初始值设定项初始化聚合。不能将构造函数用于聚合的任意初始化逻辑。

我们干杯了吗?不,因为有“命名构造函数”习语。它本质上只是一个静态成员函数,它返回一个初始化的对象,并能够执行一些逻辑。该习语与聚合初始化兼容。

struct Foo {
    int x, y;
    static Foo filled_with(int value) {
        return {.x = value, .y = value};
    }
};

Foo foo = {.y = 1}; // Still an aggregate.
Foo foo2 = Foo::filled_with(2); // Custom logic

这种方法甚至没有任何复制或移动,因为C 17消除了复制或移动的可能性<代码>foo2直接用静态成员执行的任何操作初始化。

 类似资料:
  • 我正在开发一个运行完美的SpringBoot REST项目。我试图在项目中实现OpenApi-ui。它在默认情况下工作得很好,但我希望使用自己的YAML/JSON信息文件,而不是默认的信息。 访问OpenApi UI的URL http://localhost:8080/swagger-ui/index.html?configurl=/v3/api-docs/swagger-config OpenA

  • 本文向大家介绍Java加载默认配置,包括了Java加载默认配置的使用技巧和注意事项,需要的朋友参考一下 示例 要读取默认配置属性:            

  • 在MVC Java编程配置方式下,如果你想对默认配置进行定制,你可以自己实现WebMvcConfigurer接口,要么继承WebMvcConfigurerAdapter类并覆写你需要定制的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { // Override

  • 与Jquery Mobile自动初始化共同协作 Working with Jquery Mobile's Auto-initialization 不像其他的Jq项目,比如jq和jq ui,Jquery Mobile会在加载到增强特性时马上应用它(远早于document.ready事件发生时)。这些特性会基于Jquery Mobile的默认配置应用,是针对默认的情形设计的,他可能符合你的需求,也可能

  • 我对ActiveMQ非常陌生,希望能在设置tomEE的默认内部ActiveMQ代理方面提供一些帮助。具体来说,任何一本书的样本。xml将非常有用。

  • 我尝试添加到自定义配置类中,但仍然看到相同的问题。