我有很多功能可以引用typedef
'd数据类型,如下所示:
typedef std::map<string, string> dict;
union ret_t{
int i;
long l;
double d;
};
ret_t func1(char* bytes, dict &d){
//blah blah
}
ret_t func2(char* bytes, dict &d){
//blah blah 2
}
我还有一个处理函数的映射,使用boost::function
定义如下:
std::map <int, boost::function< ret_t (char*, dict) > > handlers;
我定义了这个,使用我正在使用的&gt; 100处理函数,我只需读取一个键并调用handlers[key](bytes, d);
并让我的函数执行,只需要3个if / elses我的不同数据类型(知道我需要的数据类型是另一个我不会涉及的问题。这与问题无关)。这可以按预期工作。
我的问题是少数函数不使用字典,并且在处理程序之外的上下文中很有用(例如,准备字节流并将其转换为long int的函数)。为了从我没有预定义dict的上下文中调用这个函数,我要么创建一个从未使用过的无用的dict:
dict d;
func1(bytes, d);
或者我必须改变这个功能:
//previous definition
ret_t func1(char* bytes){
//same blah blah as before
}
当我尝试使用默认参数(例如NULL
或空字典)定义它时,我收到编译器错误:
default argument for 'dict& d' has type 'dict {aka std::map<std::basic_string<char>, std::basic_string<char> >}'
有没有办法做我想要的,而不必完全重写我的代码来传递指针而不是引用?
答案 0 :(得分:0)
对于那些不接受字典的函数,请创建两个版本。有一个不将字典作为参数,而是一个但只是在没有字典的情况下调用另一个字典。将前者用于所有直接调用,后者用于调度,就像其他带字典的函数一样。