我搜索过很多关于成员函数委托的内容,但我没有找到任何关于它的内容。也许我搜索了错误的单词......
我尝试做以下事情:
class Foo1 {
int bar(int a, int b = 1, bool c = false);
int bar(int a, bool c);
}
// Can I write it like:
class Foo2 {
int bar(int a, int b = 1, bool c = false);
// This line is my question:
int bar(int a, bool c) : bar(a, 1, c);
}
我的编译器说只有构造函数接受初始化列表,但我想我在某处读过类似的东西。是否只有构造函数采用init列表的规则有例外吗?
答案 0 :(得分:0)
错误信息非常清楚,您无法在会员功能中执行此类委托。
你可以做的只是在一些成员函数中调用一些其他成员函数,传递一个参数,如:
class Foo1 {
int bar(int a, int b = 1, bool c = false);
int bar(int a, bool c);
}
// Can I write it like:
class Foo2 {
int bar(int a, int b = 1, bool c = false);
// Should be inlined by default, but won't hurt to specify it explicitly
inline int bar(int a, bool c) {
return bar(a, 1, c);
}
}
使用两个参数调用bar不应该有任何性能缺陷。
答案 1 :(得分:0)
init-list用于初始化类对象的基础和成员,这只对类构造函数有意义。函数没有任何内容可以初始化(函数参数除外,它们是从每次调用时传递的参数自动初始化的。)
但是将一个函数推迟到另一个函数很容易:你只需在第一个函数体中调用另一个函数。
class Foo2 {
int bar(int a, int b = 1, bool c = false);
int bar(int a, bool c) { return bar(a, 1, c); }
};