Re: Указатель на функцию
От: rg45 СССР  
Дата: 26.06.07 06:44
Оценка:
Здравствуйте, Irokez, Вы писали:

I>Вопрос вообщем в следующем.


I>есть класс к примеру:


I>
I>class A {
I>public:
I> void __stdcall F1(int k)
I> {
I>   printf("A::F1(%d)\n",k);
I> }
I>};
I>


I>и есть второй класс

I>
I>class B: public A {
I>public:
I> void __stdcall F1(int k,int d)
I> {
I>   printf("B::F1(%d,%d)\n",k,d);
I> }
I>};
I>



I>и где-то в теле надо сделать так



I>
I>...

I>void* pFNA = A::F1;
I>void* pFNB = B::F1;

I>...
I>


I>вообщем привести указатель на функцию к типу void*.

I>Компилятор ругается матом. Всякие x_cast<> — тож не помогают.
I>Есть ли какое нибудь решенеие.

I>Кстати прочитал Александреску — ничего примечательного


Грязный хак не желаете ли?:
template<typename Class, typename Result, typename Arg0>
void* void_cast(Result (Class::*method)(Arg0))
{
  typedef Result (Class::*Method)(Arg0);
  union
  {
    Method m;
    void* p; 
  }u;
  u.m = method;
  return u.p;
}

//Применение:
class A
{
public:
  int foo(const char*);
};

void* p = void_cast(&A::foo);
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Указатель на функцию
От: alzt  
Дата: 26.06.07 06:55
Оценка:
Здравствуйте, Irokez, Вы писали:

I>А его реализация Functor это вообще полный ужас. Типа если вам надо вызвать функцию с более 15 парметрами исправте код в моей библиотеке


Системные функции часто имеют много параметров, но чтобы 15 — не могу ни одной припомнить. А самому писать такие функции — ну, можно конечно, только если уверены, что никто потом это не увидит и не узнает.
Не эксперт в бусте, но помоему там можно в лямбда функциях там можно использовать всего 9 параметров (_1,_2,...) — и это более, чем за глаза. Не могу вспомнить случая, чтобы мне потребовалось хотя бы 5.

В общем ваша критика — не конструктивна.
Re[2]: Указатель на функцию
От: Roman Odaisky Украина  
Дата: 26.06.07 06:57
Оценка:
Здравствуйте, rg45, Вы писали:

R>Грязный хак не желаете ли?:


А где assert того, что оно туда помещается?
До последнего не верил в пирамиду Лебедева.
Re[3]: Указатель на функцию
От: rg45 СССР  
Дата: 26.06.07 07:00
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, rg45, Вы писали:


R>>Грязный хак не желаете ли?:


RO>А где assert того, что оно туда помещается?


Ассерта нету, потому, что хак грязный
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.