[C++] аспект программирования
возьми книжку Роджерсона по основам COM и сделай то же самое, только вместо гуида юзай строку
а вообще, такая фигня называется рефлектинг и легко реализуется в дотнете и яве.
Можно, но будет много case-ов. Красивее в С++, наверно, не получится.
Тогда уж if-ов. Как ты case-ами хочешь сравнение строк сделать?
а, блин, увлекся, он ведь только создать и вызвать по имени хочет, а не наоборот 

А если покопать в сторону Assembly?
ЗЫ Это не мне надо, но все равно интересно
ЗЫ Это не мне надо, но все равно интересно

ну, типа, там и будет рефлектинг. Только это уже сипипидотнет, а не сипипи
Можно перед линковкой генерить код функции по таблицам символов в объектных файлах.
я видел какой то немного жутковатый, но вроде перевариваемый reflection для c++
попробуй погуглись, должно найтись
попробуй погуглись, должно найтись
Какая задача вообще решается? Просто интересно стало зачем так изъе***ваться?
Ну в смысле, имхо, зачастую можно и без рефлекшна обойтись...
Ну в смысле, имхо, зачастую можно и без рефлекшна обойтись...
там просто около 300-400 классов, посему делать с if очень неприятно...
там просто около 300-400 классов, посему делать с if очень неприятно...Надо сделать map из строки в фабрику, или вообще сразу map из пары строк в функтор.
+1. А то понапридумывали тут яв и комов 

Круто, конечно. Но заносить эти пары в map все равно придется вручную. Так что не катит никак, слишком легко при добавлении нового класса забыть отразить это в map. А еще классы иногда удаляют и переименовывают. Повеситься можно.
Не надо использовать RTTI, это извращение, бред и нелепость. Все, абсолютно все, можно написать нормальным способом.
Да, и еще не стоит использовать CString, это говнокласс который есть только в микрософте. Используй std::string
Да, и еще не стоит использовать CString, это говнокласс который есть только в микрософте. Используй std::string
Не аргумент.
Надо просто вместо
везде писать
и ничего не забудешь. Рефлексия нужна не часто и там где она нужна, её вполне можно для себя сделать.
Надо просто вместо
class C { ... везде писать
CLASS(C) ...
и ничего не забудешь. Рефлексия нужна не часто и там где она нужна, её вполне можно для себя сделать.
Не надо хотеть использовать RTTI-1
Используй std::string+1
=0

-1Бред, аргументируй. Мне ни разу не понадобилось, и я не могу представить где это надо
Когда в RTTI возникает необходимость (dynamic_cast в основном то использовать _стандартный_ лучше, чем городить свой. А говорить что он никогда не нужен - это глупость, из-за такого предубеждения просто неоправданно тратишь свое время, да и время тех, кто потом хочет понять то, что ты навыдумывал.
typeid неплохо помогает в отладочной печати из всяких заумных шаблонных функций.
typeid неплохо помогает в отладочной печати из всяких заумных шаблонных функций.
Бред, аргументируй. Мне ни разу не понадобилось, и я не могу представить где это надоСильно облегчает работу с системами автоматического тестирования xUnit.
Ты когда-нить писал multiple dispatch?
Угу. вот в QT придумали свой rtti, до сих пор страдают 

Я в этом не рублю, ни разу не применял RTTI, и не представляю когда он незаменим.
multiple dispatch - грубо говоря это когда ты хочешь следующее: ( a, b, c, ... )->d. Вот здесь реально нужен RTTI.
> Да, и еще не стоит использовать CString, это говнокласс который есть только в микрософте. Используй std::string
у std::string-а хуже с поддержкой языков
да и std::string rtl тянет за собой.
у std::string-а хуже с поддержкой языков
да и std::string rtl тянет за собой.
И чем же хуже у std::string с поддержкой языков? И что такое rtl? 

Примерно то же, что и libc
то есть это плохо что мои программы тянут за собой libc? 

Плохость от платформы зависит 

>там просто около 300-400 классов, посему делать с if очень неприятно...
Изначально не подразумевалось такое использование? Нет доступа к исходникам этих классов?
Кстати, ты так и не сказал, для чего тебе вообще нужно так вызывать объекты этих классы. Цель-то какая?
Спасибо.
ЗЫ
>std::string
+1
Изначально не подразумевалось такое использование? Нет доступа к исходникам этих классов?
Кстати, ты так и не сказал, для чего тебе вообще нужно так вызывать объекты этих классы. Цель-то какая?
Спасибо.
ЗЫ
>std::string
+1
И хули тогда песдеть?
> И чем же хуже у std::string с поддержкой языков?
тем, что locale-ы (порядок сортировки, допустимые символы, форматирование чисел и времен, преобразования между 8битами и уникодом и т.д.) надо руками настраивать
тем, что locale-ы (порядок сортировки, допустимые символы, форматирование чисел и времен, преобразования между 8битами и уникодом и т.д.) надо руками настраивать
> то есть это плохо что мои программы тянут за собой libc?
если интересует размер конечного файла, то да - плохо.
если интересует размер конечного файла, то да - плохо.
> Да, и еще не стоит использовать CString, это говнокласс который есть только в микрософте. Используй std::string
вот такой код с последующим вызовом работает быстрее:
чем
ps
В целом, у std::string лучше теоретическая база, а CString - лучше вычищено практическое применение.
вот такой код с последующим вызовом работает быстрее:
CString GetString
{
return "Bla-Bla";
}
чем
std::string GetString
{
return "Bla-Bla";
}
ps
В целом, у std::string лучше теоретическая база, а CString - лучше вычищено практическое применение.
Почему? В смысле почему быстрее?
Бред. Бред и еще раз бред!
Песдетс у тибя аргументы
> Почему? В смысле почему быстрее?
Потому что std::string всегда копирует строку при присваиваниях, в отличии, от CString-а.
Потому что std::string всегда копирует строку при присваиваниях, в отличии, от CString-а.
Это в стандарте сказано?
Потому что std::string всегда копирует строку при присваиваниях, в отличии, от CString-а.Наглая ложь. Не исмпользуй кривую реализацию.
В стандарте это не сказано. Вменяемые реализации не копируют.
Что значит вменяемые? У таких реализаций вроде какие-то проблемы с многопоточностью.
а у CString'а значит их нет? И что ты имеешь ввиду под проблемами? Если незначительное падение скорости - то да, есть. Так же как очевидно и у CString.
http://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html
Умеет выковыривать информацию о классах из отладочной информации,
это на случай если совсем уж не хочется менять исходники и есть
возможность оставить дебаг информацию в релизе.
Умеет выковыривать информацию о классах из отладочной информации,
это на случай если совсем уж не хочется менять исходники и есть
возможность оставить дебаг информацию в релизе.
В стандарте это не сказано. Вменяемые реализации не копируют.Сказано-сказано. В главе 21.3 сформулированы правила для std::string, и добавлено, что эти правила делают возможным, но не обязательным reference-counting. И дальше сказано, что реализации через счётчик должны иметь ту же семантику, что и без него. Соответственно, во всех правильных реализациях через счётчик и делается, поэтому ничего не копируется.
Оставить комментарий
geja_03
Пусть есть 2 класса с1 и с2. Хочется создать глобальную функцию, которая получает 2 параметра: CString classname и CString methodname.В ней надо создать объект класса, название которого classname и вызвать от него метод с названием methodname. Можно ли это реализовать и как, если да?