在c++中为传递的引用提供默认参数
having default arguments for passed references in C++
我有许多函数引用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用于我的不同数据类型(知道我需要的数据类型是另一个问题,我不会进入。这与问题无关)。
我的问题是少数函数不使用字典,并且在处理程序之外的上下文中很有用(例如,准备好字节流并将其转换为长int的函数)。为了从没有预定义字典的上下文中调用此函数,我必须创建一个从未使用过的无用字典:
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> >}'
是否有一种方法可以做我想要的,而不必完全重写我的代码来传递指针而不是引用?
对于那些不接受字典的函数,创建两个版本。一个不接受字典作为参数,一个接受,但只调用另一个,不带字典。前者用于所有直接调用,后者用于像其他接受字典的函数一样的分派。
相关文章:
- 具有默认值的引用获取函数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 调用默认构造函数时不引用它
- 默认(可选)参数作为引用 c++
- 不能引用类继承默认构造函数
- 可以通过常量引用返回默认参数的值吗?
- 对 const 引用参数使用默认值会导致崩溃
- 为什么C++默认情况下不移动构造右值引用?
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 使用默认值初始化成员引用
- 模板默认参数将丢失其引用类型
- 使用默认构造函数引用成员变量初始化错误
- 未优化的 constexpr 的未定义引用用作默认参数
- 默认情况下C++数组作为参数引用
- 在结构的联合成员中使用std::string时,无法引用默认构造函数
- 无法引用默认构造函数 - 它是 VS 中已删除的函数
- 常量引用默认值