我想写D绑定。对于类A
的生命,它的someStruct *
成员变量永远不会改变,所以我想将它声明为immutable
是很自然的。但是,除非我以某种方式管理APICall
函数的返回值为const
,否则它的构造函数将无法编译。怎么做?
struct someStruct;
const someStruct* APICall();
class A
{
this()
{
this.ptr = myfunc();
}
private:
immutable someStruct* ptr;
}
错误:function app.APICall without 'this' cannot be const
答案 0 :(得分:2)
您希望在返回值周围使用括号:
const(someStruct*) APICall();
或者如果它永远不会改变,immutable
会更好。 (const
主要用于函数参数而不是返回值)
在函数声明之前或之后没有括号的const或immutable应用于this
参数,这就是为什么错误说出它的内容:你试图将它应用于this
isn&# 39;那里。
但是,在执行此操作之前,请确保实际不可变 - 指针永远不会更改并且指向的数据也不会更改。如果通过指针有任何可变性,你应该让它变得可变。