Существует код C, который мы пытаемся преобразовать в код C ++. Существовали две иерархии наследования, которыми C управлял через switch..case. Это было преобразовано для использования виртуальных функций в C ++. Теперь в какой-то момент эти две иерархии должны быть связаны. Например, класс A относится к A1, класс B относится к B1 .... где A, B, C попадают в иерархию1, а A1, B1, C1 попадают в иерархию2.
В коде C это достигается сохранением поля тега (или поля типа, используемого в switch..case) иерархии 2 в A, B, C. Может ли кто-нибудь подсказать мне, как достичь этого C ++ чисто?
В С
enum NodeTag1
{
A_Node
, B_Node
....
};
enum NodeTag2
{
A1_Node
, B1_Node
....
};
struct Node
{
NodeTag1 tag1;
};
struct A
{
NodeTag1 tag1;
NodeTag2 tag2;
..other members...
};
struct B, C выглядят одинаково.
Теперь предположим, что есть 10 функций (f1, f2 ..), которые используют NodeTag1 для переключения .. case
В С ++
class Node { //10 virtual functions (f1,f2 ..)};
class A : public Node { // 10 virtual function( f1, f2.. ) };
class B : public Node { // 10 virtual function( f1, f2.. ) };
Теперь есть такая функция, которая вызывается из экземпляров иерархии 1.
int decide( NodeTag2 tag2 )
{
switch(tag2)
{
...
}
}
Как мне добиться этого в C ++?
Спасибо,
Gokul.