Могу ли я использовать шаблоны здесь? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть следующий фрагмент кода:

int CreatePropertiesDialog(int type, void *object)
{
    if( type == 1 )
    {
        ClassA *a = static_cast<ClassA *>( object );
        // build the properties dialog
    }
    if( type == 2 )
    {
        ClassB *b = static_cast<ClassB *>( object );
        // build the properties dialog
    }
    // display the properties dialog
}

Однако использование типа void* звучит очень некрасиво.

Можно ли улучшить этот код с помощью шаблона?Или, может быть, каким-то другим способом?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете отказаться от параметра type и получить два метода: один для ClassA или один для ClassB.Например:

int CreatePropertiesDialog(ClassA *a)
{
        // build the properties dialog
        DialogConf conf = ...
        return displayDialog(conf);   
}


int CreatePropertiesDialog(ClassB *b)
{
        // build the properties dialog
        DialogConf conf = ...
        return displayDialog(conf);   
}

int displayDialog(DialogConf conf) {
    // ...
}

Или, вы можете иметь ClassA и ClassB, отвечающие за построение конфигурации, каждый из которых имеет метод, который возвращает DialogConf, который содержит конфигурацию, и затем передает ее displayDialog.

0 голосов
/ 11 февраля 2019

Зависит от того, как вы вызываете код и каковы доступные данные.

Например, если у вас есть куча void*:

void** objects = get_objects();

CreatePropertiesDialog(type, objects[1]);

Тогда все ваши данные void*.Необходимо обработать его как есть или изменить код, чтобы не использовать пустые указатели.

Если у вас есть локальные переменные или переменные известных типов, тогда может быть назначена перегрузка:

int CreatePropertiesDialog(ClassA*) {
    // ...
}

int CreatePropertiesDialog(ClassB*) {
    // ...
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...