Указатели на функции классов
От: Mattias  
Дата: 23.07.10 14:54
Оценка:
Есть класс

class A {
public:
A() {};

private:
void func1( int ) {};
void func2( int) {};


};

Хочу добавить в него указатель на функцию, который будет устанавливаться в конструкторе и при вызове обращаться либо к func1 либо к func2

То есть чтобы можно было из любой процедуры класса вызывать этот указатель (который является членом класса) а сам указатель устанавливать в конструкторе на соответствующую функцию.


Как это можно сделать?
Re: Указатели на функции классов
От: Vamp Россия  
Дата: 23.07.10 15:23
Оценка: 2 (1)
M>Хочу добавить в него указатель на функцию, который будет устанавливаться в конструкторе и при вызове обращаться либо к func1 либо к func2

M>Как это можно сделать?


#include <iostream>

using namespace std;

class A {

public:
typedef void (A::*f)();
f selector;

void func1() {cout << "F1" << endl;}
void func2() {cout << "F2" << endl;}
void call_selector() { (this->*selector)();}

A(bool s) {
     if (s == true)
         selector = &A::func1;
     else
         selector = &A::func2;
}  

};

int main() {
     A f1(true);
     A f2(false);
     (f1.*(f1.selector))();
     f1.call_selector();
     (f2.*(f2.selector))();
     f2.call_selector();

}
Да здравствует мыло душистое и веревка пушистая.
Re: Указатели на функции классов
От: musix Россия  
Дата: 23.07.10 15:38
Оценка:
Здравствуйте, Mattias, Вы писали:

M>Есть класс


M>class A {

M>public:
M> A() {};

M>private:

M> void func1( int ) {};
M> void func2( int) {};


M>};


M>Хочу добавить в него указатель на функцию, который будет устанавливаться в конструкторе и при вызове обращаться либо к func1 либо к func2


M>То есть чтобы можно было из любой процедуры класса вызывать этот указатель (который является членом класса) а сам указатель устанавливать в конструкторе на соответствующую функцию.



M>Как это можно сделать?


Так что ли?

class A {
public:
    A() { 
        m_ptr = &A::func1; 
        (this->*m_ptr)(5); 
    };

private:
    void (A::*m_ptr)(int);
    void func1( int );
    void func2( int);
};

void A::func1( int ) {}
void A::func2( int) {}
Re[2]: Указатели на функции классов
От: Mattias  
Дата: 23.07.10 16:18
Оценка:
Здравствуйте, Vamp, Вы писали:

M>>Хочу добавить в него указатель на функцию, который будет устанавливаться в конструкторе и при вызове обращаться либо к func1 либо к func2


M>>Как это можно сделать?


V>
V>#include <iostream>

V>using namespace std;

V>class A {

V>public:
V>typedef void (A::*f)();
V>f selector;

V>void func1() {cout << "F1" << endl;}
V>void func2() {cout << "F2" << endl;}
V>void call_selector() { (this->*selector)();}

V>A(bool s) {
V>     if (s == true)
V>         selector = &A::func1;
V>     else
V>         selector = &A::func2;
V>}  

V>};

V>int main() {
V>     A f1(true);
V>     A f2(false);
V>     (f1.*(f1.selector))();
V>     f1.call_selector();
V>     (f2.*(f2.selector))();
V>     f2.call_selector();

V>}
V>



Спасибо. Все заработало)
Re: Указатели на функции классов
От: morm Россия  
Дата: 23.07.10 16:22
Оценка: 1 (1) +2
Здравствуйте, Mattias, Вы писали:

M>Есть класс


M>class A {

M>public:
M> A() {};

M>private:

M> void func1( int ) {};
M> void func2( int) {};


M>};


M>Хочу добавить в него указатель на функцию, который будет устанавливаться в конструкторе и при вызове обращаться либо к func1 либо к func2


M>То есть чтобы можно было из любой процедуры класса вызывать этот указатель (который является членом класса) а сам указатель устанавливать в конструкторе на соответствующую функцию.



M>Как это можно сделать?


Полиморфизм не подходит из принципиальных соображений?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.