LINUX.ORG.RU

exceptions сделать что-то в каждом из них

 ,


0

1

допустип есть такой код:

try
{
   doThing();
}
catch (const exceptionA& a)
{
   handleA();
}
catch (const exceptionB& b)
{
   handleB();
}
...

Как выполнить handleCommon() и для А и для В? Ну т.е. можно продублировать везде, что я сейчас и собираюсь сделать, просто хотел узнать, есть ли другой способ.

★★★★★
Ответ на: комментарий от andreyu

Да хотя бы с

То есть пример с костылем в виде idшника — это единственное, что ты придумал? rtti не только для этого применяется.

И даже в этом случае, при добавлении очередного класса тебе придется писать очередную ветку, добавлять очередной id типа. Это, возможно, оправданно, если этот вызов у тебя 1000000 раз в секунду дергается.

/// разовые вызовы.
root.add_module<modA>( paramA ); // тут rtti. создадим модуль с типом modA 
root.add_module<modB>( paramB0, paramB1 ); // тут rtti. создадим модуль с типом modB 

/// где-то потом.
.......

/// разовые вызовы.
auto ma = root.module<modA>( ); // тут rtti. найдем экземпляр по его типу
auto mb = root.module<modB>( ); // и тут тоже
....
ma.callA1( )
ma.callA2( )
...
mb.callB1( )
mb.callB2( )

anonymous
()
Ответ на: комментарий от anonymous

То есть пример с костылем в виде idшника

Как по вашему работает rtti?

— это единственное, что ты придумал?

Ну придумайте что-то еще. Вы спросили в сравнении с чем, я вам дал ответ.

rtti не только для этого применяется.

И что по вашему это должно означать?

И даже в этом случае, при добавлении очередного класса тебе придется писать очередную ветку, добавлять очередной id типа.

О боже, при добавлении класса мне придется описать этот класс. Ужас.

Это, возможно, оправданно, если этот вызов у тебя 1000000 раз в секунду дергается.

В данном случае значительная разница будет видна уже на ГОРАЗДО меньшем количестве итераций. Тест написать осилите сами?

В любом случае, что вы будете делать, если поддержки rtti нет? К примеру на андроеде, или использовать stlport без rtti, или gnustl с поддержкой rtti.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous
root.add_module<modA>( paramA ); // тут rtti. создадим модуль с типом modA 
root.add_module<modB>( paramB0, paramB1 ); // тут rtti. создадим модуль с типом modB 



А где тут rtti? Я вижу шаблонные объекты, унаследованные от общего предка.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

О боже, при добавлении класса мне придется описать этот класс. Ужас.

тебе еще придется придумать уникальный ID и добавить его в твой switch. и так по количеству классов.

Тест написать осилите сами?

пфф..и вызывать 10000 раз в секунду? анахрена? rtti не для этого сделали.

К примеру на андроеде,

с r5 уже поддерживает. с разморозкой.

anonymous
()
Ответ на: комментарий от anonymous

с r5 уже поддерживает. с разморозкой.

Текущиая версия ndk-r10d. Но только в gnustl есть поддержка rtti, stlport по прежнему не умеет rtti.

пфф..и вызывать 10000 раз в секунду? анахрена? rtti не для этого сделали.

Это как-то отменяет тот факт, что простой свитч будет быстрее нативного rtti?

тебе еще придется придумать уникальный ID и добавить его в твой switch. и так по количеству классов.

Беда, как дальше жить.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Я вижу шаблонные объекты, унаследованные от общего предка.

неважно, что ты видишь. rtti там применяется при сохранении этих объектов и при последующем поиске.

anonymous
()
Ответ на: комментарий от andreyu

Беда, как дальше жить.

Понятно. Дальше хеловордов с 2 классами не писал. Тогда умолкаю, вырастишь поймёшь.

anonymous
()
Ответ на: комментарий от anonymous

неважно, что ты видишь. rtti там применяется при сохранении этих объектов

Ненужно там для сохранения никакого rtti.

и при последующем поиске.

Зачем там нужен rtti? Спорим этот код заработает без поддержки rtti?

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

Понятно. Дальше хеловордов с 2 классами не писал.

Баба Ванга, не узнаю вас в гриме.

Тогда умолкаю, вырастишь поймёшь.

Что я должен вырастить, что бы понять?

andreyu ★★★★★
()
Ответ на: комментарий от Gorthauer

А разве stlport не отправили на кладбище?

Может и отправляли, но в r10 он еще присутствует.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.