2015-07-15 1 views
2

у меня есть:Как я могу использовать std.typecons.Typedef с функциями?

typedef void function(int) handler = &noOp; 

Как ЬурейеЕ осуждается, мне сказали, чтобы использовать либо псевдоним (которым не позволяет установить инициализатор по умолчанию) или std.typecons.Typedef (что делает). Однако, следующее не работает:

import std.typecons; 
alias handler = Typedef!(void function(int), &noOp); 

Как я могу установить инициализатору тип функции без typedef?

ответ

2

Это хороший пример времени, чтобы знать основы - я думаю, что понимание входов и выходов struct более полезно, чем Typedef, так как вы можете делать с ним гораздо больше. Вот как вы можете это сделать:

void noOp(int) {} 
struct handler { 
    void function(int) fn = &noOp; // here's the initializer 
    alias fn this; // this allows implicit conversion 
} 
void main() { 
    handler h; 
    assert(h == &noOp); // it was initialized automatically! 
    static void other(int) {} 
    h = &other; // and you can still reassign it 
} 

alias this, пожалуй, спорное - это позволяет неявное преобразование и из базового типа, как alias, но это отличается от typedef. Вы также можете настроить его, выполнив отдельные конструкторы, перегрузки opAssign и т. Д., В зависимости от того, какое именно поведение вам необходимо. Спросите меня, и я могу уточнить, но также вы захотите поиграть с ним и посмотреть, нравится ли вам, как это работает сейчас.

+0

Я знал об этом, но никогда не видел, когда его использовать, приятно спасибо! – cym13