У меня есть класс кнопки. Я хочу, чтобы конструктор класса кнопки взял функцию, которую он вызовет при нажатии кнопки. Это было бы легко, если бы класс кнопки выполнял только функцию из одного класса, но назначение конструктора кнопки, использующего функцию, заключается в том, что независимо от того, какой класс будет создан в этой кнопке, он сможет хранить указатель на функцию в . класс он создан вПередача функции-члена в качестве аргумента конструктору
Для иллюстрации:
struct Button {
Button(void (*functionPtr)()) {
// Store the function pointer to be called later
}
};
struct SomeClass {
void LoadFile();
SomeClass() {
Button* temp1 = new Button(&LoadFile); // ???
}
};
struct AnotherClass {
void SaveFile();
SomeClass() {
Button* temp2 = new Button(&SaveFile); // ???
}
};
Как я могу сделать эту работу?
Как насчет хранения 'std :: function' члена, а затем передачи lambdas, которые выполняют захват класса для вас? –
Надеюсь, вы понимаете, что вам нужно «это» так или иначе, будь он похоронен в связанной оболочке или снабжен указателем на функцию (который в настоящее время даже не является указателем на функцию-член). Я бы начал с этого. – WhozCraig
Возможно, вы захотите проверить ['boost :: сигналы'] (http://www.boost.org/doc/libs/1_58_0/doc/html/signals.html), хотя, как отмечает @BaummitAugen,' ' std :: function'' + lambdas теперь отлично подходят для этого. –