2016-04-23 3 views
-1

Если у меня есть-структуру:C++ как перегрузить операторы для переменных-членов

typedef struct Foo 
{ 
    std::function<bool()> func; 
}Foo; 

и у меня есть функция Void

void bar(){std::cout << "hey";} 

, и я хочу быть в состоянии сделать это:

Foo f; 
f.func = bar // f.func == func(){std::cout << "hey"; return true;} 
+1

Нет необходимости для этого 'ЬурейеЙ структуры X { } X' ерунда в C++. Просто напишите 'struct X {}' –

+0

Если вы перегружаете операторы google * C++ для переменных-членов *, вы получите ответ. Вы должны сделать какую-то работу самостоятельно, и только если после должной осмотрительности вы все еще в тупике, спросите здесь. – MikeJRamsey56

ответ

1

Первое, что тип функции для void bar() {} - void(), а не bool() , Так FUNC должно быть:

std::function<void()> func; 

Вторая вещь: не ясно, что «C++ как перегрузить операторы для переменных-членов» средствами. Если вы хотите скомпилировать свой код, то вышеуказанного изменения достаточно. Оператор, которого вы можете перегрузить, - void operator()() { func(); }, если вы хотите позвонить f();.

Если вы хотите сохранить bool() тип функции и все еще быть в состоянии назвать void() функции, то вы можете использовать лямбду, который будет вызывать bar и возвращает истина:

f.func = [](){ bar(); return true;}; 
+0

Комментарий к последней строке предполагает, что он хочет, чтобы присвоение привело к тому, что 'f.func' сохранил измененную версию' bar', которая после выполнения того, что обычно делает bar, возвращает true. –