如何在Objective-C中使用自定义构造函数初始化自动成员

时间:2015-08-28 02:31:34

标签: objective-c constructor objective-c++

我有一个带有自定义构造函数的C ++类。

struct Inner {
    int i_;
    Inner(int i): i_(i) {}
};

我想将它用作Objective-C类的自动成员。

如果我在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具有相同的生命周期,而我宁愿不必将它指向一个必须在堆上手动分配并在{{1 }}

0 个答案:

没有答案