如何在 Objective-C 中使用自定义构造函数初始化自动成员
How can I initialize an automatic member with a custom constructor in Objective-C
我有一个带有自定义构造函数的 C++ class。
struct Inner {
int i_;
Inner(int i): i_(i) {}
};
我想将其用作 Objective-C class 的自动成员。
如果我在 C++ 中做同样的事情,我会将参数传递给初始化列表中成员的构造函数:
class Outer {
Inner inner_;
public:
// Automatic member variables with custom constructors must
// be initialized in the parent struct's initialization list.
Outer(int i): inner_(i) {}
// This will cause an error
//Outer() {}
int val() { return inner_.i_; }
};
在 Objective-C 中,它看起来像这样:
@interface Outer () {
Inner inner_;
}
@end
@implementation Outer
- (instancetype)initWithValue:(NSInteger)i
{
self = [super init];
if (self) {
// ...
}
return self;
}
- (NSInteger)val {
return inner_.val();
}
但我不知道在哪里可以将值传递给 Inner 的构造函数,因为 Objective-C 没有初始化列表。这会生成编译器错误,否则 "No matching constructor for initialization of 'Inner'"
。
有什么办法可以做到吗?在我的例子中 inner_
应该与 Outer
具有相同的生命周期,我宁愿不必使它成为指向必须在堆上手动分配并在 [=17] 中释放的对象的指针=].
在Objective-C++中,实例变量必须是default constructible,并且在分配时默认构造。
不幸的是,没有太多official documentation to back this up, and what there is is very old而且已经过时了。
我有一个带有自定义构造函数的 C++ class。
struct Inner {
int i_;
Inner(int i): i_(i) {}
};
我想将其用作 Objective-C class 的自动成员。
如果我在 C++ 中做同样的事情,我会将参数传递给初始化列表中成员的构造函数:
class Outer {
Inner inner_;
public:
// Automatic member variables with custom constructors must
// be initialized in the parent struct's initialization list.
Outer(int i): inner_(i) {}
// This will cause an error
//Outer() {}
int val() { return inner_.i_; }
};
在 Objective-C 中,它看起来像这样:
@interface Outer () {
Inner inner_;
}
@end
@implementation Outer
- (instancetype)initWithValue:(NSInteger)i
{
self = [super init];
if (self) {
// ...
}
return self;
}
- (NSInteger)val {
return inner_.val();
}
但我不知道在哪里可以将值传递给 Inner 的构造函数,因为 Objective-C 没有初始化列表。这会生成编译器错误,否则 "No matching constructor for initialization of 'Inner'"
。
有什么办法可以做到吗?在我的例子中 inner_
应该与 Outer
具有相同的生命周期,我宁愿不必使它成为指向必须在堆上手动分配并在 [=17] 中释放的对象的指针=].
在Objective-C++中,实例变量必须是default constructible,并且在分配时默认构造。
不幸的是,没有太多official documentation to back this up, and what there is is very old而且已经过时了。