1
голосов
3ответов
1562 просмотров

Нужно ли мне использовать dynamic_cast при вызове функции, принимающей базовый класс?

У меня есть несколько таких классов: interface class IA { }; interface class IB { }; public ref class C : public IA, public IB { }; public ref class D { void DoSomething(IA^ aaa) { } void Run() { C^ bob = gcnew C(); DoSomething(dynamic_cast<IA^>(b...

6
голосов
3ответов
1356 просмотров

Является ли LLVM исключением из правила, позволяющего избежать динамического приведения типов?

LLVM имеет собственную альтернативу RTTI, которая является улучшением скорости по сравнению со встроенным RTTI и позволяет динамическое преобразование в классы без vtable (dyn_cast). Тем не менее, его можно использовать точно так же, как dynamic_cast<>, хотя он позволяет использовать его с...

2
голосов
3ответов
1048 просмотров

dynamic_cast of a COM object to a COM interface doesn't bump the reference count, does it?

If I have a C++ class, X, which implements the COM interfaces IY and IZ, and I have a pointer y to the IY interface of an object of type X, and I do this: IZ *z = dynamic_cast<IZ *> ( y ); That doesn't bump the object's reference count, does it? I don't have to do a Release() to account ...

1
голосов
3ответов
739 просмотров

Acceptable to use virtual inheritance to prevent accidentally creating a diamond?

This is a simplification of some real code, and a real mistake I made when I didn't realize someone else had already implemented Foo and derived from it. #include <iostream> struct Base { virtual ~Base() { } virtual void print() = 0; }; struct OtherBase { virtual ~OtherBase() { ...

5
голосов
4ответов
6851 просмотров

Static cast vs. dymamic cast for traversing inheritance hierarchies

I saw one book on C++ mentioning that navigating inheritance hierarchies using static cast is more efficient than using dynamic cast. Example: #include <iostream> #include <typeinfo> using namespace std; class Shape { public: virtual ~Shape() {}; }; class Circle : public Shape {};...

44
голосов
4ответов
28801 просмотров

Difference in behavior while using dynamic_cast with reference and pointers

I was checking the behavior of dynamic_cast and found that when it fails, std::bad_cast exception is thrown only if the destination is a reference type. If the destination is a pointer type then no exception is thrown from the cast. This is my sample code: class A { public: virtual ~...

0
голосов
7ответов
1117 просмотров

Следует ли использовать для копирования dynamic_cast <t>?</t>

Обновление 1: Исправленный бред! Спасибо за комментарии, я сделал хеш первого фрагмента, упс. Обновление 2: Также обновлен заголовок вопроса, поскольку в ответах указывалось, что использование dynamic_cast необязательно. Здесь я пытаюсь создать глубокую копию с исполь...

6
голосов
6ответов
10816 просмотров

dynamic_cast не работает

У меня есть базовый класс и производный класс. У каждого класса есть файл .h и файл .cpp. Я выполняю динамическое преобразование объекта базового класса в производный класс в следующем коде: h-файлы: class Base { public: Base(); virtual ~Base(); }; class Derived : public Base...

2
голосов
5ответов
493 просмотров

Как мне различать подклассы

У меня есть класс токенов, который выглядит примерно так: class Token { public: typedef enum { STRTOK, INTTOK } Type; virtual bool IsA(Type) = 0; } class IntTok : public Token { int data; public: bool IsA(Type t) { return (t == INTTOK); } int GetData() { return data; } } In...

6
голосов
7ответов
36352 просмотров

C #: динамическое приведение типов

В настоящее время у меня есть такой код: private void FillObject(Object MainObject, Foo Arg1, Bar Arg2) { if (MainObject is SomeClassType1) { SomeClassType1 HelpObject = (SomeClassType1)MainObject; HelpObject.Property1 = Arg1; HelpObject.Property2 = Arg2; }...

18
голосов
10ответов
6844 просмотров

Как я могу избежать dynamic_cast в моем коде C ++?

Допустим, у меня есть следующая структура классов: class Car; class FooCar : public Car; class BarCar : public Car; class Engine; class FooEngine : public Engine; class BarEngine : public Engine; Давайте также дадим Car дескриптор его Engine. FooCar будет создан с FooEngine*, а BarCar бу...

7
голосов
5ответов
10309 просмотров

динамическое приведение с интерфейсами

У меня есть класс с двумя интерфейсами, который наследует 1 класс. В общем, это выглядит так: class T : public A, public IB, public IC { }; В коде есть одна точка, в которой у меня есть IB *, но я действительно могу использовать A *. Я надеялся, что динамическое приведение понравится: ...

2
голосов
2ответов
2648 просмотров

C ++: недопустимое преобразование из «BaseNode *» в «Match *»

Все объекты в моей программе наследуются от класса контейнера. Класс Container имеет метод virtual BaseNode* getParent() const; и метод virtual void setParent(BaseNode *p);. У меня есть класс Set (установленный в теннисном матче, а не в структуре данных), который имеет класс Match как родител...

1
голосов
9ответов
3843 просмотров

Безопасная проверка типа переменной

Для системы мне нужно преобразовать указатель в длинный, а затем обратно в тип указателя. Как вы понимаете, это очень опасно. Я хотел использовать dynamic_cast для преобразования, поэтому, если я их смешаю, я получу нулевой указатель. На этой странице написано http://publib.boulder.ibm.com/info...

18
голосов
6ответов
13163 просмотров

Что могло вызвать сбой при использовании dynamic_cast?

У меня есть такой фрагмент кода: TAxis *axis = 0; if (dynamic_cast&lt;MonitorObjectH1C*&gt;(obj)) axis = (dynamic_cast&lt;MonitorObjectH1C*&gt;(obj))-&gt;GetXaxis(); Иногда происходит сбой: Thread 1 (Thread -1208658240 (LWP 11400)): #0 0x0019e7a2 in _dl_sysinfo_int80 () from /lib/l...

23
голосов
5ответов
12056 просмотров

обработка ошибок c ++ dynamic_cast

Есть ли какая-либо хорошая практика, связанная с обработкой ошибок dynamic_cast (кроме отказа от ее использования, когда вам это не нужно)? Мне интересно, как мне использовать NULL и bad_cast, которые он может выбросить. Стоит ли мне проверить оба? И если я поймаю bad_cast или обнаружу NULL, я, ...

23
голосов
6ответов
26335 просмотров

Какие примеры "хорошего использования" динамического приведения типов?

Мы часто слышим / читаем, что следует избегать динамического приведения типов. Мне было интересно, какие, по вашему мнению, примеры его «полезного использования»? Изменить: Да, мне известно о другом потоке : это действительно, читая там один из первых ответов, я задал свой вопрос!