Здравствуйте, 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>>
Здравствуйте, Irokez, Вы писали:
I>А его реализация Functor это вообще полный ужас. Типа если вам надо вызвать функцию с более 15 парметрами исправте код в моей библиотеке
Системные функции часто имеют много параметров, но чтобы 15 — не могу ни одной припомнить. А самому писать такие функции — ну, можно конечно, только если уверены, что никто потом это не увидит и не узнает.
Не эксперт в бусте, но помоему там можно в лямбда функциях там можно использовать всего 9 параметров (_1,_2,...) — и это более, чем за глаза. Не могу вспомнить случая, чтобы мне потребовалось хотя бы 5.
В общем ваша критика — не конструктивна.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, rg45, Вы писали:
R>>Грязный хак не желаете ли?:
RO>А где assert того, что оно туда помещается?
Ассерта нету, потому, что хак грязный

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>