Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2012, 21:29   #11
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

В конечном итоге я конечно сделал так:
Код:
typedef void* RTTI;
tempate <class T> RTTI _stamp()
{
    static char r;
    return &r;
}
Но альтернативой рассматривал вариант со статиком в хидере.
Так что, как бы, ничего криминального...
EUGY вне форума Ответить с цитированием
Старый 01.03.2012, 21:33   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
В конечном итоге я конечно сделал так:
Код:
typedef void* RTTI;
tempate <class T> RTTI _stamp()
{
    static char r;
    return &r;
}
Но альтернативой рассматривал вариант со статиком в хидере.
Так что, как бы, ничего криминального...
Эм... а как следует использовать данную конструкцию?
_Bers вне форума Ответить с цитированием
Старый 01.03.2012, 21:42   #13
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

В одной из работ мне нужно было создать иерархию классов имеющих в основе один базовый, и при этом осуществить как down-cast, так и up-cast между ними.
Оператор dynamic_cast в этом случае не помогал.
Ну, а _stamp просто одна из впомогательных функций, выдающая уникальный номер для класса в параметре шаблона.
EUGY вне форума Ответить с цитированием
Старый 01.03.2012, 23:41   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Идею не вполне угадываю. Наверное, потому что не вижу всю картинку в "целом"
А так вообще, для динамической идентификации типов (а так же для статической проверки "особенностей" типа), лично я использую объекты-мемберы безымянных статических структур.

С их помощью можно передать сколько угодно полную информацию о строении самого класса (теоретически можно, но на практике использовать динамические классы, поддерживающие эффект рефлексии на с++ мне просто ни разу так и не понадобилось), а так же передавать спецификацию класса. Спецификация класса - это способность класса поддерживать те, или иные операции/возможности.

Я назвал такую технику "контракты". И чаще всего использую для определения внутри одного объекта, поддерживает ли пришедший через аргумент-указатель объект требуемые контракты в рантайме (для полиморфных), либо через шаблонный метод-мембер времени компиляции.

Как бы... идеологически, я считаю, что все, имеющие отношение к той или иной конкретной абстракции должно быть внутри самой абстракции. И стараюсь не использовать никаких вспомогательных внешних механизмов.

Ну и плюс кучка дополнительных функций-утилит поставляются отдельно от класса, автоматизируя некоторые рутинные операции, которые можно выполнять с объектами класса, через его паблик интерфейс.
_Bers вне форума Ответить с цитированием
Старый 02.03.2012, 00:20   #15
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Я видел посты где Вы описывали это. Интересно.
У меня была довольно геморная задача. Воду лить не стану, но пришлось писать "с-нуля" весь кастинг иерархии и освобождение от циклических ссылок с обходом периметра.
При этом объекты должны иметь только публичные интерфейсные методы или публичные поля в виде других объектов и поддерживать бейсикоподобный синтаксис типа:

Код:
	
	win W = New;  //class win : public object
	frm F = New;  // class frm : public win
	win Z = F;    // Good Casting
	frm X = W;    // Error: Bad Casting
	frm Y = Z;    // Good Casting
	Y.parent = W; // parent  is class win
	W = NULL;
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно заменять "запятая" на "Enter" Silent-cry Microsoft Office Word 4 26.01.2018 12:03
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04