我可以在这里使用模板吗?

时间:2019-02-11 16:24:03

标签: c++ c++11

我有以下代码:

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 :(得分:5)

您可以一起放弃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) {
    // ...
}

或者,您可以让ClassAClassB负责构建配置,方法是分别使用一种方法,该方法返回包含配置的DialogConf并将其传递给{{1} }。

答案 1 :(得分:3)

取决于您如何调用代码以及可用的数据是什么。

例如,如果您有一堆void*

void** objects = get_objects();

CreatePropertiesDialog(type, objects[1]);

那么您输入的全部是void*。必须必须按原样处理它或重构代码以不使用空指针。

如果您具有已知类型的局部变量或变量,则可能需要重载:

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

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

没有更多关于输入数据的信息,很难给出更准确的答案。