我有许多引用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;
我定义了这一点,以便使用我正在使用的 >100 个处理函数,我可以简单地读取一个键并调用handlers[key](bytes, d);
并让我的函数执行,我的不同数据类型只需要 3 个 if/else(知道我需要的数据类型是另一个我不会涉及的问题。它与问题无关)。这按预期工作。
我的问题是少数函数不使用字典,并且在处理程序之外的上下文中很有用(例如,准备字节流并将其转换为 long int 的函数)。为了从我没有预定义字典的上下文中调用此函数,我要么必须创建一个从未使用过的无用字典:
dict d;
func1(bytes, d);
或者我必须 pverride 函数:
//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> >}'
有没有办法做我想做的事,而不必完全重写我的代码来传递指针而不是引用?