Как правильно работать с указателями на функции, являющимися членами класса
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 11.03.16 06:39
Оценка:
Есть функции, не являющиеся членами классов:

void  function1(char *s, long double &val)
{
    //...
}

void  function2(char *s, long double &val)
{
    //...
}


Эти функции я помещаю в контейнер std::map :

typedef  void (*p1)(char*, long double&);
typedef  std::pair<int,p1>::const_iterator  p1iter;

std::map<int,p1>  mymap1;
std::map<int,p1>::const_iterator  p1iter;

mymap1.insert(p1pair(1,&function1));
mymap1.insert(p1pair(2,&function2));


Это всё нормально компилируется и нормально работает.

Но во я создал класс:

class  myclass
{
    public:
    //...
    void  myfunc1(long double val);
    void  myfunc2(long double val);
    void  callmyfunc1andmyfunc2(); 
    //...
}


Использую аналогичным образом указатели на функции:

typedef void (*p2)(long double);
typedef std::pair<int,p2>  p2pair;


внутри функции callmyfunc1andmyfunc2 я пишу следующее:

std::map<int,p2>  mymap2;
std::map<int,p2>::const_iterator  p2iter;

mymap2.insert(p2pair(1,&myfunc1));
mymap2.insert(p2pair(2,&myfunc2));


На что мне компилятор говорит:

Error: отсутствуют экземпляры конструктора "std::pair<_Ty1,_Ty2>::pair[c_Ty1=int,_Ty2=p2]",
соответствующие списку аргументов типа аргументов:
(int,void(myclass::*)(long double val))


Как решить эту проблему? Как сделать так, чтобы в классе myclass в функции callmyfunc1andmyfunc2 можно было бы работать с контейнером std::map , в который можно было бы поместить указатели на функции myfunc1 и myfunc2 того же класса myclass?
1613 г. = 2024 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.