2015-11-03 1 views
2

Я хотел бы написать D привязок. Для жизни класса A его переменная-член someStruct * никогда не изменится, поэтому, я думаю, естественно объявить ее immutable. Но тогда его конструктор не будет компилироваться, если мне не удастся каким-либо образом объявить возвращаемое значение функции как 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

В текущей форме это сама функция, которая является константой. Здесь это NOOP, но когда функция является членом _class_ или _struct_, это означает, что вызов функции не изменяет состояние _struct_ или _class_. –

ответ

2

Вы хотите использовать круглые скобки вокруг возвращаемого значения:

const(someStruct*) APICall(); 

или если он не изменится, immutable лучше. (const в основном используется на параметрах функции, а не возвращаемые значениях)

константных или неизменных без скобок до или после объявления функции относится к параметру this, поэтому ошибка говорит, что он говорит: вы пытаетесь применить его до this, которого нет.

Но, прежде чем это сделать, убедитесь, что это фактически неизменяемый - что указатель никогда не изменяется и что данные, на которые он указывает, никогда не меняются. Если с помощью указателя есть какая-либо изменчивость, вы должны просто изменить его.