|
|
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
На счет статического понятно - можно, а вот, обычный метод, почему нельзя? Даже, если прописать объект, которому он пренадлежит? Типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:00 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Че за юх, при явном привидении типа?: матершина компилятора pult_wrapper.cpp:7: error: argument of type `void (Pult_wrapper::)(short unsigned int, unsigned char*, short unsigned int)' does not match `void (*)(short unsigned int, unsigned char*, short unsigned int)' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:12 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
А объявление func() можно увидеть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:15 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
raven_unixА объявление func() можно увидеть? А какая разница? Он не может сделать явное приведение типов. Но для представления, сейчас выкину листинги ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:26 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:29 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Просто приведение из типа "указатель на метод класса" к типу "указатель на функцию" невозможно. При вызове метода класса ему всегда передается указатель this. Если бы возможно приведение к типу "указатель на функцию", то откуда компилятор бы взял указатель this. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:34 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
raven_unixПросто приведение из типа "указатель на метод класса" к типу "указатель на функцию" невозможно. При вызове метода класса ему всегда передается указатель this. Если бы возможно приведение к типу "указатель на функцию", то откуда компилятор бы взял указатель this. При вызове конструктора класса, он знает указатель на this, т.к. это указатель объекта, который создается . Поэтому он может посчитать , где будет указатель на функцию создаваемого объекта . Не понятно, почему не возможно приведение к типу "указатель на функцию"??? PS: То, что в конструкторе и функциях класса, this подразумевается, сам собой, это понятно. В данном случае, я его указал для наглядности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 13:47 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Я понимаю, что в Вашем примере указатель this был приведен только для наглядности. Я говорю о том, что две совсем разные операции - вызов простой функции и вызов метода класса. При вызове функции, происходит переход на адрес функции и передача параметров, а при вызове метода класса дополнительно происходит передача указателя this. Или Вы хотите, чтобы указатель был как на простую функцию, а компилятор знал, что это не простая функция, а метод класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 14:17 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Можно, всё можно, там тип вызова надо указать правильно Вот например определение метода, вызывающегося при событии (Билдер): Код: plaintext Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 14:20 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
С this наконец-то мне доперло. :) Тогда вопрос - а как это сделать в обычных С++? __closure он не понимает в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 14:41 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
__closur, если я не ошибаюсь - фишка Borland'a А без этого надо заменить Код: plaintext на Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 14:49 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
raven_unix__closur, если я не ошибаюсь - фишка Borland'a А без этого надо заменить Код: plaintext на Код: plaintext А без имени класса можно? Типа, сказать, что это будет класс, но какой не скажу. Пусть молча сохраняет this и передает. Как в Борланде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 14:55 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
AkhКак в Борланде хочешь как в бормане, в нём и пиши :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 14:57 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас AkhКак в Борланде хочешь как в бормане, в нём и пиши :) Это точно. Не позоляет С++ так делать. А жаль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:05 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
raven_unix ru> Не позоляет С++ так делать. ru> А жаль. Моё ИМХО состоит в том, что должна быть возможность и в других реализациях, в той же МСВЦ Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:06 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Надо Вам пересмотреть структуру классов, программы, чтобы не надо было использовать указатели на методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:14 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас AkhКак в Борланде хочешь как в бормане, в нём и пиши :) Чур меня, чур. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:16 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
raven_unixНадо Вам пересмотреть структуру классов, программы, чтобы не надо было использовать указатели на методы. У меня модули, кои являются классами. А они пользуют утилиты разные, тоже мной написанные, типа, таймер, поток,... которые вызывают каллбаки. Так вот эти каллбаки, должны являться методами моих классов. То бишь: 1. Утилиты ничего не знают про классы, они лишь могут знать, что метод какого-то класса надо вызывать. 2. Любой модуль реализован ввиде класса и добавлять к модулю отдельную функцию очень не хочется. Использовать статик, не хорошо, но приходится. Надо сделать как-то покрасивши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:20 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас raven_unix ru> Не позоляет С++ так делать. ru> А жаль. Моё ИМХО состоит в том, что должна быть возможность и в других реализациях, в той же МСВЦ Это моя надежда. :) Но мне, собственно говоря, надо чтобы это реализовалось по стандарту, во первых компилятор gcc, а во вторых, чтобы на все случаи жизни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:22 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Появилась одна мысль! Может сделать как в жабе? Timer и TimerTask? Здесь не будет проблем с С++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:24 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Может можно завести общий класс-предок ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:26 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасМожет можно завести общий класс-предок ? По определению, любая утилита не может знать никакой не специфичный для нее класс. Наследовать, же специфичные классы от чего попало, тоже не хорошо. Сейчас мне кажется, что мой вариант, единственно возможный, тем более, что при вызове каллбака, хорошим стилем является указание, к чему этот класс относится; если я не ошибаюсь, этим и ялвяется Sender в борланде (как билдер, так и делфя). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:34 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Я не очень в java, не знаю структуру их классов Вообще можно сделать так: создать абстрактный класс (интерфейс), где перечислить все методы, которые Вам нужно вызывать. После этого надо сделать все необходимые классы наследниками этого интерфейса. После этого в функции тип параметра будет указатель на этот интерфейс. И все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:36 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
raven_unixЯ не очень в java, не знаю структуру их классов Вообще можно сделать так: создать абстрактный класс (интерфейс), где перечислить все методы, которые Вам нужно вызывать. После этого надо сделать все необходимые классы наследниками этого интерфейса. После этого в функции тип параметра будет указатель на этот интерфейс. И все. Мне кажется, что мы имеем ввиду одно и тоже. Получается что-то, вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Минус подхода - приходится создавать еще один класс, т.е. функция обработки таймаута, находится в другом классе. Не знаю пока, как это расценивать с точки зрения подхода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 15:50 |
|
||
|
Почему нельзя передавать параметром метод класса?
|
|||
|---|---|---|---|
|
#18+
Да точно, так я и думал. Не вижу минусов. Всего лишь создать абстрактный класс. Код классов менять даже не придется (только сделать их наследниками этого класса). Мне кажется, самый удобный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 16:02 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33921384&tid=2030627]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 483ms |

| 0 / 0 |
