类型别名

类型别名相当于C的typedef

typealias size_t = Int32

枚举

枚举和C++相同,但总是占命名空间。

enum Color {
    Red, Green = 2, Blue
}

fun foo(c: Color) {}

foo(Color::Red)

可以设置大小:

enum Color : UInt8 {
    Red, Green = 2, Blue
}

不安全结构

unsafe结构完全和对应的C++类一致,不包含安全检查需要的标记位。extern结构默认是unsafe的。

unsafe里的this的类型是裸指针,而不是安全指针。如果对象是独立用new关键字分配的,可以通过rawToRef转为安全指针。

unsafe struct A {
    fun foo() {
        var self = rawToRef(this)
    }
}

dconst方法

为了减少代码重复,以及函数重载这种复杂特性,Sric提供了dconst方法。

struct A {
    var i: String
    fun foo() dconst : * String {
        ...
        return &i
    }
}

dconst方法在编译器内部会自动生成cosnt和非const两个版本的。等价于下面的C++代码:

class A {
    string i;
public:
    string* foo() {
        ...
        return &i;
    }

    const string* foo() const {
        ...
        return &i;
    }
};