2013-05-19 3 views
0

Я знаю, что следующий код не будет компилироваться, но я все равно его разместил, потому что он иллюстрирует то, что я пытаюсь выполнить.реализовать общий метод позже в C++

typedef struct { 
    void actionMethod(); 
}Object; 

Object myObject; 

void myObject.actionMethod() { 
    // do something; 
} 

Object anotherObject; 

void anotherObject.actionMethod() { 
    // do something else; 
} 

main() { 
    myObject.actionMethod(); 
    anotherObject.actionMethod(); 
} 

В принципе, я хочу, это какой-то делегат. Есть ли простой способ сделать это?

Я не могу включить заголовок <functional> и использовать std::function. Как я могу это сделать?

+4

Возможно, у объекта есть указатель на функцию. –

+0

как это сделать? – user2142733

ответ

1

Например:

#include <iostream> 

using namespace std; 

struct AnObject { 
    void (*actionMethod)(); 
}; 

void anActionMethod() { 
    cout << "This is one implementation" << endl; 
} 

void anotherActionMethod() { 
    cout << "This is another implementation" << endl; 
} 

int main() { 
    AnObject myObject, anotherObject; 
    myObject.actionMethod = &anActionMethod; 
    anotherObject.actionMethod = &anotherActionMethod; 

    myObject.actionMethod(); 
    anotherObject.actionMethod(); 

    return 0; 
} 

Выход:

This is one implementation 
This is another implementation 
+0

спасибо !! это сработало! – user2142733

1

Подарите Object членов указателя функции:

struct Object { 
    void (*actionMethod)(); 
}; 

Здесь член actionMethod является указателем на функцию, не принимая никаких аргументов и ничего не возвращает. Тогда, скажем, у вас есть функция под названием foo, вы можете установить actionMethod, чтобы указать на эту функцию следующим образом:

Object myObject; 
myObject.actionMethod = &foo; 

Что вы можете звонить с myObject.actionmethod().

Смежные вопросы