如果我没有在结构中定义构造函数,我可以通过如下方式选择某个值来初始化它:
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 () {}
,但似乎也不起作用。
到目前为止,这是我能找到的最接近的东西:
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}};
但是你需要使用双参数
类似于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};
你不能既有蛋糕又吃。如果对象具有构造函数,则它不再是聚合,只能使用指定的初始值设定项初始化聚合。不能将构造函数用于聚合的任意初始化逻辑。
我们干杯了吗?不,因为有“命名构造函数”习语。它本质上只是一个静态成员函数,它返回一个初始化的对象,并能够执行一些逻辑。该习语与聚合初始化兼容。
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将非常有用。
我尝试添加到自定义配置类中,但仍然看到相同的问题。