Указатель на функцию
От: Irokez  
Дата: 21.12.04 21:31
Оценка: 3 (1) +1 -1 :))
Вопрос вообщем в следующем.

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

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


и есть второй класс
class B: public A {
public:
 void __stdcall F1(int k,int d)
 {
   printf("B::F1(%d,%d)\n",k,d);
 }
};



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


...

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

...


вообщем привести указатель на функцию к типу void*.
Компилятор ругается матом. Всякие x_cast<> — тож не помогают.
Есть ли какое нибудь решенеие.

Кстати прочитал Александреску — ничего примечательного
Re: Указатель на функцию
От: korzhik Россия  
Дата: 21.12.04 21:52
Оценка: :))
Здравствуйте, Irokez, Вы писали:

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


[skip]

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

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

указатель на функцию-член нельзя приводить к void*
меняй дизайн
зачем тебе это нужно?

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


резко ты тему переменил...
ну и правильно, он ламер ваще.
Re[2]: Указатель на функцию
От: Irokez  
Дата: 21.12.04 22:09
Оценка: -6
Здравствуйте, korzhik, Вы писали:

да вот решил замахнуться на милкософтовский РПС. мутит меня как они там всего навыдумывали.
а надо эт для того чтобы некий гипотетический программист создал класс ну к примеру так

на сервере
class A {
public:
 virtual void __stdcall F1(int k)
 {
   printf("A::F1(%d)\n",k);
 }
};

и где-то там-же

 A a;
 MyRpcRegisterMethod("A::F1",&a,A::F1);

на стороне клиента
 MyRpcCall("A::F1",5);

ну и соответственно на сервере 
вывелось бы

 A::F1(5)


По поводу Александреску. Ничего он там куртого (как в предисловии от Майерса написано) не придумал. Просто обощил. И то в непонятной форме. Элджер и то лучше изложил.

А его реализация Functor это вообще полный ужас. Типа если вам надо вызвать функцию с более 15 парметрами исправте код в моей библиотеке
Re[3]: Указатель на функцию
От: Shady Россия  
Дата: 21.12.04 22:40
Оценка:
Hello, Irokez!
You wrote on Tue, 21 Dec 2004 22:09:16 GMT:

I> да вот решил замахнуться на милкософтовский РПС. мутит меня как они там всего навыдумывали.

I> а надо эт для того чтобы некий гипотетический программист создал класс ну к примеру так

[тут был код]
Ну пять балов, чудо маршалинг, и как в МС не догадались до такого элегантного решения, чтобы в рантайме парсить строку для вызова метода?

I> По поводу Александреску. Ничего он там куртого (как в предисловии от Майерса написано) не

I> придумал. Просто обощил. И то в непонятной форме. Элджер и то лучше изложил.
Мдя...

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

I> парметрами исправте код в моей библиотеке
Ну я в шоке лично, не знаю как остальная публика. Скажи пожалуйста уважаемый, а как ты хочешь маршалить функции без писанины:
template<typename ret, typename arg1> ret f(arg1)
{
// ...
}

template<typename ret, typename arg1, typename arg2> ret f(arg1, arg2)
{
// ...
}
...

Приведи свои идеи пожалуйста, а то все что-то бьются, никак ответ не придумают...
Posted via RSDN NNTP Server 1.9 delta
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re: Указатель на функцию
От: Аноним  
Дата: 21.12.04 22:45
Оценка:
Это невозможно.

Но boost::bind и boost::function помогут
тебе решить твою задачу.


P.S. Популярный это однако вопрос, о том как указатель на метод
класса преобразовать в void* .
Пару раз за неделю он тут возникает
Re[4]: Указатель на функцию
От: Irokez  
Дата: 21.12.04 22:48
Оценка: -3
Здравствуйте, Shady, Вы писали:

Насчет уважаемого эт хорошо. Но спасибо я уже разобрался с этим без всяких там шаблонов. Ребята если вас научили мыслить стереотипно, то это не значит что все другие должны мылить как авторы книг которые вы читаете. (Прошу прощения ничего личного.)

Отвечу одно без всяких проблем могу получить адресс функции метода класса и привести его к любому типу. Если кому интересно могу написать статью в RSDN. А ваши издевки можете оставить при себе.
Re[2]: Указатель на функцию
От: Irokez  
Дата: 21.12.04 22:50
Оценка: -2
Здравствуйте, Аноним, Вы писали:

Спорю на пиво что возможно. Я уже код набросал работет на ура

А>Это невозможно.


А>Но boost::bind и boost::function помогут

А>тебе решить твою задачу.


А>P.S. Популярный это однако вопрос, о том как указатель на метод

А>класса преобразовать в void* .
А>Пару раз за неделю он тут возникает
Re[5]: Указатель на функцию
От: Shady Россия  
Дата: 21.12.04 22:53
Оценка:
Hello, Irokez!
You wrote on Tue, 21 Dec 2004 22:48:39 GMT:

I> Насчет уважаемого эт хорошо. Но спасибо я уже разобрался с этим без всяких там шаблонов. Ребята

I> если вас научили мыслить стереотипно, то это не значит что все другие должны мылить как авторы
I> книг которые вы читаете. (Прошу прощения ничего личного.)
Да ладно, всё нормально, но см. ниже.

I> Отвечу одно без всяких проблем могу получить адресс функции метода класса и привести его к

I> любому типу.
Можно на этом по подробнее?

I> Если кому интересно могу написать статью в RSDN. А ваши издевки можете оставить при

I> себе.
Напишите по подробнее ваш код, без шаблонов, и чтобы всё это было бы переносимо... Мне действительно интересно.
Posted via RSDN NNTP Server 1.9 delta
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[3]: Указатель на функцию
От: Shady Россия  
Дата: 21.12.04 22:56
Оценка:
Hello, Irokez!
You wrote on Tue, 21 Dec 2004 22:50:37 GMT:

I> Спорю на пиво что возможно. Я уже код набросал работет на ура

Переносимо? Без хаков?
Posted via RSDN NNTP Server 1.9 delta
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[3]: Указатель на функцию
От: Андрей Тарасевич Беларусь  
Дата: 21.12.04 22:56
Оценка: +1 :))) :)
Здравствуйте, Irokez, Вы писали:

I>Спорю на пиво что возможно. Я уже код набросал работет на ура


Это тебе показалось, что твой код работает. Просто ты его плохо и однобоко тестировал, если вообще тестировал.

"Я уже код набросал работет на ура" — это стандартный этап в эволюции любителя приводить указатели на методы классов к типу 'void*' (как тебе уже сказали, тут этот вопрос возникает по нескольку раз на неделе). Это нормально, но рекомендуется не застревать на этом этапе надолго.
Best regards,
Андрей Тарасевич
Re[4]: Указатель на функцию
От: Irokez  
Дата: 21.12.04 23:00
Оценка: -12 :))) :))) :))) :)
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, Irokez, Вы писали:


I>>Спорю на пиво что возможно. Я уже код набросал работет на ура


АТ>Это тебе показалось, что твой код работает. Просто ты его плохо и однобоко тестировал, если вообще тестировал.


АТ>"Я уже код набросал работет на ура" — это стандартный этап в эволюции любителя приводить указатели на методы классов к типу 'void*' (как тебе уже сказали, тут этот вопрос возникает по нескольку раз на неделе). Это нормально, но рекомендуется не застревать на этом этапе надолго.

Батенька если вас здесь оценили как эксперт то это не значит что ВЫ на самом деле им являетесь. А как ВЫ варазились любитель я уже 14 лет занимаюсь только С и С++.
Re[5]: Указатель на функцию
От: Shady Россия  
Дата: 21.12.04 23:04
Оценка: -1
Hello, Irokez!
You wrote on Tue, 21 Dec 2004 23:00:13 GMT:

I> Батенька если вас здесь оценили как эксперт то это не значит что ВЫ на самом деле им являетесь.

I> А как ВЫ варазились любитель я уже 14 лет занимаюсь только С и С++.
Можно код увидеть? Хоть намётки, а то не усну. если не увижу! Не уж то всех нас (а я то же сейчас занимаюсь маршалингом) переплюнули?
Posted via RSDN NNTP Server 1.9 delta
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[4]: Указатель на функцию
От: Shady Россия  
Дата: 21.12.04 23:06
Оценка: +1
Hello, Андрей!
You wrote on Tue, 21 Dec 2004 22:56:37 GMT:

АТ> любителя

Кстати, вот это слово несколько обидно. Большинство же не любители, а "новички", учащиеся так сказать. А все мы такие были и остаемся, так как с C++ можно каждый день открывать что-то новое
Posted via RSDN NNTP Server 1.9 delta
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re: Указатель на функцию
От: Irokez  
Дата: 21.12.04 23:13
Оценка: -2 :))
Вообщем я так и понял что найдутся возомнившие о себе крутые папики, которые будут учить "любителей" как правильно программировать. Обиделся я.

Для тех кто в танке Получить адресс функции метода класса одназначно можно, без всяких хаков. Стандартным синтакисом С++. Проверяно в VC7.1 код совместим работает как, в релиз так, и в дебаг версии с уникодом и без.

Спасибо топик можно закрывать.
Re[5]: Указатель на функцию
От: Аноним  
Дата: 21.12.04 23:14
Оценка: +1 :)
Здравствуйте, Irokez, Вы писали:

I>Батенька если вас здесь оценили как эксперт то это не значит что ВЫ на самом деле им являетесь. А как ВЫ варазились любитель я уже 14 лет занимаюсь только С и С++.


В программировании, как и в математике митинговать смысла нету.
Код в студию и все встанет на свои места.

А особенность указателя на метод класса в том,
что он не может существовать без объекта.
Вот хоть ты тресни, но нужна пара (объект, метод)
в этом то и причина невозможности преобразования к void*
Тут дело даже не в физическом представлении а в логическом.
Невозможно вызвать метод объекта не имея самого объекта.

В любом случае удачи!
Re[2]: Указатель на функцию
От: Аноним  
Дата: 21.12.04 23:17
Оценка:
Здравствуйте, Irokez, Вы писали:

I>Вообщем я так и понял что найдутся возомнившие о себе крутые папики, которые будут учить "любителей" как правильно программировать. Обиделся я.


I>Для тех кто в танке Получить адресс функции метода класса одназначно можно, без всяких хаков. Стандартным синтакисом С++. Проверяно в VC7.1 код совместим работает как, в релиз так, и в дебаг версии с уникодом и без.


Дак ты о темы то не уходи.
То что можно взять адрес метода класса, с этим никто не спорит.
Вопрос о том как его преобразовать в void*

Ты код давай, а не лозунгами бросайся!
Re[2]: Указатель на функцию
От: Shady Россия  
Дата: 21.12.04 23:18
Оценка:
Hello, Irokez!
You wrote on Tue, 21 Dec 2004 23:13:10 GMT:

I> Для тех кто в танке Получить адресс функции метода класса одназначно можно, без всяких хаков.

I> Стандартным синтакисом С++. Проверяно в VC7.1 код совместим работает как, в релиз так, и в дебаг
I> версии с уникодом и без.

Можно всё же код.
Posted via RSDN NNTP Server 1.9 delta
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[6]: Указатель на функцию
От: Irokez  
Дата: 21.12.04 23:20
Оценка: :))
Здравствуйте, Аноним, Вы писали:

Смешно вы говорите.
Трасировал на встроенном дизасемблере вызов функции метода класса. Или я тут один такой умный (не примите как возвышение над вами). неявный указатель this, нужен только для одной вещи, чтобы обратиться к член-данным класса, и ни при чем тут функции.
Re[5]: Указатель на функцию
От: Андрей Тарасевич Беларусь  
Дата: 21.12.04 23:22
Оценка: 22 (5) +5 :))) :)
Здравствуйте, Irokez, Вы писали:

АТ>>"Я уже код набросал работет на ура" — это стандартный этап в эволюции любителя приводить указатели на методы классов к типу 'void*' (как тебе уже сказали, тут этот вопрос возникает по нескольку раз на неделе). Это нормально, но рекомендуется не застревать на этом этапе надолго.

I>Батенька если вас здесь оценили как эксперт то это не значит что ВЫ на самом деле им являетесь.

А это соврешенно не важно. Для того, чтобы знать таблицу умножения не надо быть профессором математики. Для того, чтобы разбитаться в таких базовых вопросах, как корректность приведения типов в С++, не надо быть экспертом С++.

I>А как ВЫ варазились любитель я уже 14 лет занимаюсь только С и С++.


У меня есть определенные трудности с точным парсингом этого предложения из-за отсутсвия в нем знаков препинания (зрителям: "казнить нельзя помиловать", хе-хе-хе). Но общий смысл мне понятен.

Ну как вам сказать... Представьте себе бабушку, которая 60 лет водила машину по маршруту дом-рыбный магазин где-нибудь в вечнозеленой Калифорнии. Внимание, вопрос: годятся ли ее 60 лет водительского стажа для езды по московской гололедице?

Вот так же и у вас: 14 лет вы занимались культивацией у себя в голове кривых неправильных представлений о С и С++. Это, извините, совсем плохо.
Best regards,
Андрей Тарасевич
Re[7]: Указатель на функцию
От: Аноним  
Дата: 21.12.04 23:24
Оценка:
Здравствуйте, Irokez, Вы писали:

I>Здравствуйте, Аноним, Вы писали:


I>Смешно вы говорите.

I>Трасировал на встроенном дизасемблере вызов функции метода класса. Или я тут один такой умный (не примите как возвышение над вами). неявный указатель this, нужен только для одной вещи, чтобы обратиться к член-данным класса, и ни при чем тут функции.

Слова все это. Слова.
Код где?
Там кода должно быть с гулькин нос
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.