2013-02-13 2 views
0

У меня есть два определяемые пользователем классы:как я бросаю указатели определенных пользователем классов без использования наследования

class A:class Base 
{ 
type x; 
doSomething(); 
} 

class B 
{ 
type x; 
doSomething(); 
} 

У меня также есть функция, которая получает переменную типа базы и использовать dynamic_cast, чтобы преобразовать его в тип A и используйте doSomething().

class D : class Base2 
{ 
    D(Base _base1):Base2(Base _base1) 
    { 
     //here is the actual problem 
    } 
    void foo() 
    { 
     //b is a private member of class Base2 of type Base 
     A *a=dynamic_cast(b); 
     A->doSomething(); 
    } 
} 

, но я хочу передать B этой функции, и в то же время я не хочу B наследовать от базы.

p.s Я не имею доступ к изменению базы

, как это возможно?

+0

У вас нет. См. [Строгое сглаживание] (http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule) для чего. – WhozCraig

ответ

3

Кастинг между несвязанными классами в небезопасном. Самый безопасный способ добиться того, что я пытаюсь сделать, - использовать шаблон функции:

+1

+1 о простейшем решении, которое можно себе представить в этой задаче. – WhozCraig

+0

Позвольте мне изменить вопрос – Shohreh

Смежные вопросы