| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > приведения указателя на метод класса к указателю |
| Автор: wpp 17.11.2005, 21:54 |
| приведения указателя на метод класса к указателю на функцию, возможно ли? |
| Автор: Void 17.11.2005, 22:01 |
| Иногда возможно через reinterpret_cast. Практической пользы ноль. |
| Автор: wpp 18.11.2005, 11:43 |
| Ну а если есть функция (С), которая в качестве параметра принимает указатель на функцию, а мне надо впарить ей указатель на метод класса? |
| Автор: Neitron 18.11.2005, 11:53 |
| wpp Длина указателя на ф-ции нестатическая. |
| Автор: wpp 18.11.2005, 12:10 |
| Neitron Для меня, к сожалению, Ваше высказывание крайне загадочно... Нельзя ли подоходчивей? |
| Автор: Neitron 18.11.2005, 12:39 | ||
| wpp Чтобы передать указатель на ф-цию, нужно знать его точный размер. Длина указателя на разного типа ф-ции разная. Это конечно не факт, но она не обязана быть одинаковой. Если работаешь в Билдере, можешь воспользоваться методом __closure с помощью которого можно создать тип указателя на функцию член. Нечто вроде
|
| Автор: SergeCpp 18.11.2005, 12:41 |
| Можно, только если это статический метод класса... Если не статический, то http://ders.stml.net/cpp/cpp3comm/cpp3comm.html#475 |
| Автор: Earnest 18.11.2005, 19:10 |
| wpp дело не только в размере указателя, даже если он 4 байта, как у простых классов MSVC, передать-то можно, а вот при вызове что ты получишь? большой ОЙ. У тебя 2 варианта: Если код, которому нужно передать указатель на функцию, можно переписать - перепиши - либо добавь дополнительный параметр (указатель на объект) + статические оболочки для методов класса. А может там уже есть дополнительный параметр? Либо вообще перепроектируй, используя что-то вроде делегатов. Простую реализацию можешь сам написать, либо возьми boost::function (а может и еще что есть). Если код чужой или переписывать его никак невозможно, то, если нет дополнительного параметра, через который можно передать указатель на объект, остаетcя только этот указатель куда-нибудь запихивать (в статическую переменную напр.). Но это очень негибкий путь... Ну или в зависимости от задачи искать пути. |
| Автор: wpp 19.11.2005, 13:02 | ||||
Мда... С++ действительно достоин замены...
В ней я изменения вносить не хочу. Мой метод:
Как передать второе первому |
| Автор: Mayk 19.11.2005, 13:21 | ||
| Объявляешь ф-цию статической. Далее так static someclass:function -> в первую легко передается this -> передаешь через data требуемый аргумент -> someclass::argument Около того:
|
| Автор: np9mi7 19.11.2005, 14:35 |
| Товарищи, указатель на метод - это вообще не тип (если исключить расширения языковые, типа __closure), так что это не возможно для ANSI C++ |
| Автор: Mayk 19.11.2005, 14:46 | ||||
Здрасьте. А что это такое?
|
| Автор: np9mi7 19.11.2005, 15:06 | ||
|
| Автор: Mayk 19.11.2005, 15:15 | ||
эээ. А разве &Hello::print и geronimo->*pActivity имеют один и тот же тип? Что такое pActivity - если не указатель на метод? |