2015-11-03 88 views
2

我想寫D綁定。對於班級生活AsomeStruct *成員變量永遠不會改變,所以我認爲將它聲明爲immutable是自然的。但是,除非我管理APICall函數的返回值const,否則它的構造函數將不會編譯。怎麼做?如何聲明extern(「C」)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

在當前形式中,它是const的函數本身。這裏是一個NOOP,但是當函數是_class_或_struct_的成員時,這意味着對該函數的調用不會修改_struct_或_class_狀態。 –

回答

2

你想用括號圍繞返回值:

const(someStruct*) APICall(); 

,或者如果它永遠不會改變,immutable更好。 (const是函數的參數,而不是返回值是最有用)

const或不可改變沒有之前或函數聲明適用於this參數,這是後括號爲什麼錯誤說什麼它說:你嘗試應用它到this這是不存在的。

但是,在執行此操作之前,請確保它實際上是不可變 - 指針永遠不會更改,並且它指向的數據也不會更改。如果通過指針有任何可變性,你應該讓它變爲可變的。