2012-08-25 84 views
4

我想设置我的功能类对象参数设置为默认值。但是当我尝试这样做时,它在编译时失败。如何将默认参数设置为C++中的类对象?

class base { 
// ... 
}; 

int myfunc(int a, base b = NULL) { 
    if (NULL = b) { 
     // DO SOMETHING 
    } else { 
    // DO SOMETHING 
    } 
} 

这里的时候,我试图编译它,这给了我错误认为 “默认参数基极b是int型的”

+2

你需要做'B'的指针,'base'这个工作:'基地* B = NULL' – jrok

回答

11

你这里有三个明显的选择。

首先,使用过载,以便呼叫者可以选择是否通过b

int myfunc(int a) { ... } 
int myfunc(int a, base& b) { ... } 

这样你就可以通过b而不必使用指针。请注意,您应该使b为引用或指针类型,以避免slicing该对象。其次,如果您不想要2个独立的实现,请将b指针设置为NULL

int myfunc(int a, base* b = NULL) { ... } 

第三,你可以使用的东西封装可为空的概念,如boost::optional

int myfunc(int a, boost::optional<base&> b = boost::optional<base&>()) { ... } 
-1

是这样的:

const T defVal; 
void MyFunc(T t = defVal) { 
[...] 
} 

void MyFunc(T t = T()) { 
[...] 
} 

void MyFunc(T* t = NULL) { 
[...] 
} 
12

C++中的对象不能为NULL

要设置参数为默认值,只需使用:

int myfunc(int a, base b = base()) 
+0

是'基地()'调用'base'的构造? – 0x499602D2

+0

@David yes,'base()'default-构造一个类型为“base”的对象。 –

相关问题