将默认参数传递给c++函数
Passing default parameter to function C++
我想用默认参数调用函数,或者由我给出,但默认参数是指定的类私有变量,这里简化了示例:
Class::Something
{
public:
void setI(int i);
private:
void func(int i = this->i_default, j=this, k=this->k_default, l=this->l_default);
int i_default; // May be different for different instances.
int k_default; // May be different for different instances.
int l_default; // May be different for different instances.
}
所以当我调用func()时,它接受默认的i_variable,或者当我调用func(4)时,它接受4个参数而不改变i_default值。我知道我做错了什么,因为我得到错误:
Error 1 error C2355: 'this' : can only be referenced inside non-static member functions or non-static data member initializer
是否有某种方法可以实现这种行为?
是否有某种方法可以实现这种行为?
使用函数重载(感谢@PiotrSkotnicki):
void func(int i);
void func() { func(i_default); }
你可以声明i_default为const static(感谢@TartanLama)。
const static int i_default=1;
这是工作程序。
也可以使用函数重载。但这比函数重载使用更少的代码!
标准对此非常清楚。您不能在默认参数中显式地使用this
。您似乎必须使用重载来实现此结果:
void func(int i);
void func() { func(i_default); }
如果你想降低函数,你可以使用一个哨兵,允许func
决定是否使用默认值。最简单的形式:
void func(int* pi = NULL) {
int i = pi ? *pi : i_default;
// rest of the function
}
这个方法可以扩展为使用一个助手类:
#include <cstdio>
template <typename C, typename T>
class Defaltable {
T val;
T C::* ptr;
public:
Defaltable(int C::* p) {
ptr = p;
val = 0;
}
Defaltable(T x) {
val = x;
ptr = NULL;
}
T fetch(C* p) {
return ptr ? p->*ptr : val;
}
};
class Foo {
int i_default;
public:
Foo(int dflt) {
i_default = dflt;
}
int func(Defaltable<Foo, int> x = &Foo::i_default) {
return x.fetch(this);
}
};
int main()
{
Foo c(42);
printf("%dn", c.func(1));
printf("%dn", c.func());
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗