使用另一个参数的默认参数
Default parameter using another parameter
以下代码在 C++ 中无效
struct Test {
int x;
int y;
};
void function(Test A, int n = A.x) {
...
}
因为默认参数 A.x 取决于 A。有没有办法绕过这个限制?我想这样做的原因如下。我有一个 class Vector,其行为与 std::vector 非常接近,但有一个成员 allocator_ 负责分配内存。我的复制构造函数有 2 个参数:
Vector(const Vector& A, Allocator& allocator) {
...
}
如果第二个参数具有默认值,则标准允许此类复制构造函数。但我希望分配器的默认值为 A.allocator_ 这就是我尝试
的原因
Vector(const Vector& A, Allocator& allocator = A.allocator_) {
...
}
很遗憾,它不是有效的 C++。你们中有人有解决这个问题的方法吗?
最简单的解决方案是使用重载而不是默认参数:
void function(Test A, int n) {
...
}
void function(Test A) {
function(A, A.x);
}
怎么样?
你可以只使用默认值,
无效函数(测试 A,int n = 0)
{
n=A.x;
...
}
以下代码在 C++ 中无效
struct Test {
int x;
int y;
};
void function(Test A, int n = A.x) {
...
}
因为默认参数 A.x 取决于 A。有没有办法绕过这个限制?我想这样做的原因如下。我有一个 class Vector,其行为与 std::vector 非常接近,但有一个成员 allocator_ 负责分配内存。我的复制构造函数有 2 个参数:
Vector(const Vector& A, Allocator& allocator) {
...
}
如果第二个参数具有默认值,则标准允许此类复制构造函数。但我希望分配器的默认值为 A.allocator_ 这就是我尝试
的原因Vector(const Vector& A, Allocator& allocator = A.allocator_) {
...
}
很遗憾,它不是有效的 C++。你们中有人有解决这个问题的方法吗?
最简单的解决方案是使用重载而不是默认参数:
void function(Test A, int n) {
...
}
void function(Test A) {
function(A, A.x);
}
怎么样?
你可以只使用默认值,
无效函数(测试 A,int n = 0)
{
n=A.x;
...
}