D 如何声明extern(“C”)常量函数?

D 如何声明extern(“C”)常量函数?,d,D,我想写d绑定。在类A的生命周期中,其someStruct*成员变量永远不会更改,因此我想将其声明为不可变是很自然的。但是,除非我设法将APICall函数的返回值声明为const,否则它的构造函数不会编译。怎么做 struct someStruct; const someStruct* APICall(); class A { this() { this.ptr = myfunc(); } private: immutable someS

我想写d绑定。在类
A
的生命周期中,其
someStruct*
成员变量永远不会更改,因此我想将其声明为
不可变是很自然的。但是,除非我设法将
APICall
函数的返回值声明为
const
,否则它的构造函数不会编译。怎么做

struct someStruct;

const someStruct* APICall();

class A
{
    this()
    {
        this.ptr = myfunc();
    }
    private:
    immutable someStruct* ptr;
}

错误:
function app.APICall如果没有“this”则不能是常量

要在返回值周围使用括号:

const(someStruct*) APICall();
或者,如果它从未改变,
不可变
更好。(
const
主要用于函数参数,而不是返回值)

函数声明前后不带括号的const或immutable应用于
this
参数,这就是为什么错误会这么说:您试图将其应用于不存在的
this


但是,在执行此操作之前,请确保它实际上是不可变的——指针永远不会更改,它指向的数据也永远不会更改。如果指针有任何易变性,您应该让它变为易变的。

在当前形式中,常量是函数本身。这里是NOOP,但当函数是类或结构的成员时,这意味着对函数的调用不会修改结构或类状态。