我有以下代码:
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*
类型听起来很丑。
可以通过使用模板来改进此代码吗?还是其他一些方法?
答案 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) {
// ...
}
或者,您可以让ClassA
和ClassB
负责构建配置,方法是分别使用一种方法,该方法返回包含配置的DialogConf
并将其传递给{{1} }。
答案 1 :(得分:3)
取决于您如何调用代码以及可用的数据是什么。
例如,如果您有一堆void*
:
void** objects = get_objects();
CreatePropertiesDialog(type, objects[1]);
那么您输入的全部是void*
。必须必须按原样处理它或重构代码以不使用空指针。
如果您具有已知类型的局部变量或变量,则可能需要重载:
int CreatePropertiesDialog(ClassA*) {
// ...
}
int CreatePropertiesDialog(ClassB*) {
// ...
}
没有更多关于输入数据的信息,很难给出更准确的答案。