小编Jad*_*Jad的帖子

方便初始覆盖

问题

Override 子类的便利初始化程序,它会产生编译错误.

详情

我有问题理解为什么Swift(v4.1)不允许我覆盖我的便利初始化器.阅读文档我发现这两条规则适用于我的问题:

规则1如果您的子类没有定义任何指定的初始值设定项,它会自动继承其所有超类指定的初始值设定项.

规则2如果您的子类提供了所有超类指定初始值设定项的实现 - 通过按照规则1继承它们,或者通过提供自定义实现作为其定义的一部分 - 那么它会自动继承所有超类便捷初始值设定项.

在下面的代码中,我属于第一个规则,我的所有便利初始化程序都被继承ClassB.此外,由于我按照规则1继承了所有指定的初始化程序,因此我也继承了所有便利初始化程序.

class ClassA<T> {

    // This array would be private and not visible from ClassB
    var array: [T]?

    init() { }

    convenience init(array: [T]) {
        self.init()

        self.array = array
    }
}

class ClassB<T>: ClassA<T> {

    var anotherArray: [T]?

    // I feel like I should include the "override" keyword
    // but I get a compiler error when "override" is added before "convenience init".
    convenience init(array: [T]) {
        self.init() …
Run Code Online (Sandbox Code Playgroud)

inheritance init swift

16
推荐指数
1
解决办法
9027
查看次数

从Gradle转到CMake for C++项目

我们去年一直在使用Gradle作为我们的C++项目,但随着项目复杂性的增加以及我们对库的使用/创建的增加,我发现自己处理的是Gradle的知识不足的情况.

该网络为Gradle提供了大量有用的资源,但它非常注重Java.此外,我还没有看到很多使用Gradle的C++项目.出于这些原因,我正在考虑转向CMake,因为我需要大量编辑我们的构建脚本.

迁移到CMake,一个更具战斗性的测试和无处不在的C/C++构建系统,值得吗?或者坚持最近进入C++游戏的Gradle值得麻烦?

注意:我知道它们是其他C++ 选项,但CMake似乎是最能取代我们当前解决方案的选项.

c++ build-process cmake build-system gradle

7
推荐指数
1
解决办法
5164
查看次数

标签 统计

build-process ×1

build-system ×1

c++ ×1

cmake ×1

gradle ×1

inheritance ×1

init ×1

swift ×1