Другие языки программирования и технологии
c++) а... как сделать так?
class AnyClass { void class_fun( void* p ) {} };void any_fun( ???pClassFun ){ pClassFun( .. );}как передать через параметр адрес функции класса (и можно ли)?типа так:{ AnyClass c; any_fun( c.class_fun );}
Проще передать адрес экземпляра класса, а внутри уже вызвать нужную функцию этого класса.
#include <stdio.h>
class Foo
{
public:
Foo(int value) : m_value(value)
{
printf("Foo::Foo(%d)\n", m_value);
}
~Foo()
{
printf("Foo::~Foo(), m_value = %d\n", m_value);
}
void fun1(void *p)
{
printf("Foo::fun1(%.8X), m_value = %d\n", p, m_value);
}
void fun2(void *p)
{
printf("Foo::fun2(%.8X), m_value = %d\n", p, m_value);
}
void fun3(void *p)
{
printf("Foo::fun3(%.8X), m_value = %d\n", p, m_value);
}
protected:
int m_value;
};
void CallFun1(Foo &rv, void (Foo::*pf)(void*), void *p)
{
(rv.*pf)(p);
}
void CallFun2(Foo *pv, void (Foo::*pf)(void*), void *p)
{
(pv->*pf)(p);
}
int main(int argc, _TCHAR* argv[])
{
Foo a(1), b(2);
int i, j, k;
printf("&i = %.8X\n", &i);
printf("&j = %.8X\n", &j);
printf("&k = %.8X\n", &k);
CallFun1(a, &Foo::fun1, &i);
CallFun1(a, &Foo::fun2, &j);
CallFun1(a, &Foo::fun3, &k);
CallFun2(&b, &Foo::fun1, &i);
CallFun2(&b, &Foo::fun2, &j);
CallFun2(&b, &Foo::fun3, &k);
return 0;
}
// end
обявление указателя на функцию-член (не статическую)
void (Foo::*pf)(void*)
Для применения этого указателя нужен объект этого класса.
обычное применение функции-члена через оператор ., или оператор -> для указателя на объект.
Foo a, *pa;
a.fun1(NULL);
pa->fun1(NULL);
применение указателя
void (Foo::*pf)(void*);
(a.*pf)(NULL);
(pa->*pf)(NULL);
Поскольку функция-член имеет в качестве параметра некий указатель, то его также нужно передать для применения.
class Foo
{
public:
Foo(int value) : m_value(value)
{
printf("Foo::Foo(%d)\n", m_value);
}
~Foo()
{
printf("Foo::~Foo(), m_value = %d\n", m_value);
}
void fun1(void *p)
{
printf("Foo::fun1(%.8X), m_value = %d\n", p, m_value);
}
void fun2(void *p)
{
printf("Foo::fun2(%.8X), m_value = %d\n", p, m_value);
}
void fun3(void *p)
{
printf("Foo::fun3(%.8X), m_value = %d\n", p, m_value);
}
protected:
int m_value;
};
void CallFun1(Foo &rv, void (Foo::*pf)(void*), void *p)
{
(rv.*pf)(p);
}
void CallFun2(Foo *pv, void (Foo::*pf)(void*), void *p)
{
(pv->*pf)(p);
}
int main(int argc, _TCHAR* argv[])
{
Foo a(1), b(2);
int i, j, k;
printf("&i = %.8X\n", &i);
printf("&j = %.8X\n", &j);
printf("&k = %.8X\n", &k);
CallFun1(a, &Foo::fun1, &i);
CallFun1(a, &Foo::fun2, &j);
CallFun1(a, &Foo::fun3, &k);
CallFun2(&b, &Foo::fun1, &i);
CallFun2(&b, &Foo::fun2, &j);
CallFun2(&b, &Foo::fun3, &k);
return 0;
}
// end
обявление указателя на функцию-член (не статическую)
void (Foo::*pf)(void*)
Для применения этого указателя нужен объект этого класса.
обычное применение функции-члена через оператор ., или оператор -> для указателя на объект.
Foo a, *pa;
a.fun1(NULL);
pa->fun1(NULL);
применение указателя
void (Foo::*pf)(void*);
(a.*pf)(NULL);
(pa->*pf)(NULL);
Поскольку функция-член имеет в качестве параметра некий указатель, то его также нужно передать для применения.
Статические функции-члены можно передавать как обычные.
Чтобы сделать то, что ты хочешь, нужно кроме адреса функции-члена передать еще и объект, потому, что адрес объекта
в нестатическую функцию неявно идет первым аргументом...
Чтобы сделать то, что ты хочешь, нужно кроме адреса функции-члена передать еще и объект, потому, что адрес объекта
в нестатическую функцию неявно идет первым аргументом...
Похожие вопросы
- Вопросик по Pascal. Есть переменные A,B,C,D. Как сделать так, чтобы при вводе A выводилось цифра 1, B - 2, C-3, D-4?
- dev c++. помогите плз сделать задачу найти наибольшую высоту треугольника из сторонами a,b,c
- c++ builder как сделать края label видимыми
- C#. Как сделать, чтобы программа проверяла тип введённой переменной?
- Не могу сделать калькулятор C++
- Как сделать Random в C#
- C# Как сделать сохранение игры и запуск сохраненной игры?
- требуется помощь специалистов. Ребята что мне сделать с компьтером чтобы объединить память диска C и D
- C++ проблемма русификации консоли. не могу сделать чтобы консоль была русской
- Привет, у меня вопрос. Какую программу или игру можно сделать в c# widows forms? Кто какие делал. Мне срочно нужно!