|
|
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
может конечно уже поднималась эта тема, дайте тынц... как можно узнать во время выполнения программы win32 api имя класса. к примеру в mfc есть для этого IsKindOf(..) и если объект производный от CObject (а там почти все такие) то получить имя класса не составит труда. каким образом это сделать в win32 api? если можно в принципе. спасибо -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 15:04 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
typeid(class).name(); Но: 1) вроде, если класс не имеет виртуальных функций, то ничего не получиться. 2) имя класса может не совсем совпадать с нем что вернет name(). НАпример, gcc вставляет в начале чило, означающее количество символов в имени файла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 15:23 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
компилятор vc2005 sp1 -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 15:31 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Cerebrumкомпилятор vc2005 sp1 -------------------------------------------------------------- [не претендую на уникальность] Попробуй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 15:36 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
классная мысль, но не получилось, точнее получилось, но не совсем, для производного от HWND класса он вернул _HWND struct*, вместо имени производного может еще что-нибудь есть -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 15:39 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
ан нет, peacedoorball я все работает, СПАСИБО! -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 15:44 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
вот пытаюсь запихать сделать функцию из из этого typeid, но что-то не получается с параметрами... думал получиться если приводить объекты класса к void* и передавать на обработку, но он опознает их так как они и объявлены, т.е. void*. Есть ли какой-нибудь RUNTIME_CLASS определитель на этот случай?? Еще раз СПАСИБО -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 16:51 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Cerebrumвот пытаюсь запихать сделать функцию из из этого typeid, но что-то не получается с параметрами... думал получиться если приводить объекты класса к void* и передавать на обработку, но он опознает их так как они и объявлены, т.е. void*. Есть ли какой-нибудь RUNTIME_CLASS определитель на этот случай?? Еще раз СПАСИБО -------------------------------------------------------------- [не претендую на уникальность] Отнаследовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:26 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Код: 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. автор 1A 15ABCDDDDDDDDDDDD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:29 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
в смысле сделать для каждого класса вируальную функцию возвращающую его имя? -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:29 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Cцылку в функции констом уделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:30 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh[src c++] class Base { public: virtual ~Base() {}; }; .... 1A 15ABCDDDDDDDDDDDD [/quot] во именно так я и сделал, но пока не попробывал думал что будут возвращаться только Base, вместо ABCDDDDDDDDDD СПАСИБО, без тебя я бы не справился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:32 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Cerebrumв смысле сделать для каждого класса вируальную функцию возвращающую его имя? -------------------------------------------------------------- [не претендую на уникальность] Можно и так. Виртуальность ей, кстати, не за чем. typeid(*this) - вернет описание созданного класса, т.е. потомка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:33 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh Можно и так. Виртуальность ей, кстати, не за чем. typeid(*this) - вернет описание созданного класса, т.е. потомка. склоняюсь к этой идее, нежели чем к отдельной глобальной функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:34 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Cerebrum Akh Можно и так. Виртуальность ей, кстати, не за чем. typeid(*this) - вернет описание созданного класса, т.е. потомка. склоняюсь к этой идее, нежели чем к отдельной глобальной функции А смысл? typeid(object) - можно расценивать как имя объекта, т.е. object. Тогда name() получается именем функции. Что мы имеем от ввода общего родителя и ввода новой функции которая возвращает typeid(*this).name()? 1) Если деструктор предка будет виртуальным, то гарантируется наличие функциональности. 2) Получение Адаптера-метода. Если мы хотим, чтобы возвращалось std::string, а не char *, то можно конвертнуть в функции. Только есть ли толк в этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:45 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > в смысле сделать для каждого класса вируальную функцию возвращающую его имя? Именно так и делает typeid(). Зачем же писать свой ? > Можно и так. Виртуальность ей, кстати, не за чем. typeid(*this) - вернет > описание созданного класса, т.е. потомка. typeid() - виртуальная функция. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:52 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Слышал звон, а не знает где он. MasterZiv Akh пишет: > в смысле сделать для каждого класса вируальную функцию возвращающую его имя? Именно так и делает typeid(). Зачем же писать свой ? Автор не верен. Про утверждение написано далее и более подробно. MasterZiv > Можно и так. Виртуальность ей, кстати, не за чем. typeid(*this) - вернет > описание созданного класса, т.е. потомка. typeid() - виртуальная функция. Posted via ActualForum NNTP Server 1.4 Ну, и? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 17:57 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > 1) вроде, если класс не имеет виртуальных функций, то ничего не получиться. Не вроде, а так и есть. Компилятор потребует наличие хотя бы одного виртуального метода, чтобы класс стал полиморфным. > 2) имя класса может не совсем совпадать с нем что вернет name(). > НАпример, gcc вставляет в начале чило, означающее количество символов в > имени файла Там еще много тонкостей. Например, пространство действия для typeid() - один исполняемый модуль. Если у тебя несколько .DLL , то typeid() одного и того же класса может быть разным в разных .dll. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 18:01 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
MasterZivtypeid() - виртуальная функция. Что значит виртуальная функция. Виртуальный метод, это понятно. typeid() - результат зависит от полиморфного аргумента. Это понямается под виртуальной функцией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 18:04 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
уф, спасибо просветили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 19:06 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > typeid() - виртуальная функция. > Что значит виртуальная функция. Виртуальный метод, это понятно. Это вообще-то синонимы. > typeid() - результат зависит от полиморфного аргумента. Это понямается > под виртуальной функцией? Естественно, в каждой иерархии классов, начинающейся от одного корневого класса, typeid() свой. Я имел в виду, что вызов typeid() выполняется виртуально. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 10:45 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
MasterZiv Akh пишет: > typeid() - виртуальная функция. > Что значит виртуальная функция. Виртуальный метод, это понятно. Это вообще-то синонимы. > typeid() - результат зависит от полиморфного аргумента. Это понямается > под виртуальной функцией? Естественно, в каждой иерархии классов, начинающейся от одного корневого класса, typeid() свой. Я имел в виду, что вызов typeid() выполняется виртуально. Posted via ActualForum NNTP Server 1.4 Странно, я вообще-то думал, что typeid() получает вирутальную таблицу и с нее выбирает описание класса. Что-то тут не то. В данном контексте, это не синонимы. Я специально их разграничил наличием класса функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 10:58 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > Странно, я вообще-то думал, что typeid() получает вирутальную таблицу и > с нее выбирает описание класса. Что-то тут не то. Да, да, именно так! typeid() получает вирутальную таблицу через указатель this, как и любой другой виртуальный метод (функция) и из нее, т.е. через нее выбирает описание класса. > В данном контексте, это не синонимы. Я специально их разграничил > наличием класса функции. Ты ограничил, а все другие люди этого не делают. Это синонимы. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 11:00 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
MasterZiv Akh пишет: > Странно, я вообще-то думал, что typeid() получает вирутальную таблицу и > с нее выбирает описание класса. Что-то тут не то. Да, да, именно так! typeid() получает вирутальную таблицу через указатель this, как и любой другой виртуальный метод (функция) и из нее, т.е. через нее выбирает описание класса. Т.о. typeid() один на всех. :) MasterZiv > В данном контексте, это не синонимы. Я специально их разграничил > наличием класса функции. Ты ограничил, а все другие люди этого не делают. Это синонимы. Метод более узкое понятие, следовательно они не равнозначны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 11:14 |
|
||
|
имя класса в рантайм
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > Т.о. typeid() один на всех. :) На каждую иерархию классов свой. Для каждого дерева в лесе наследования. А внутри леса для typeid() работает перегрузка. > Метод более узкое понятие, следовательно они не равнозначны. Это твое личное мнение. Можешь и далее так думать, если тебе так нравится. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 15:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34717938&tid=2028377]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
221ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 503ms |

| 0 / 0 |
