使用其他参数的默认参数

时间:2015-01-30 21:25:52

标签: c++ default-value

以下代码在C ++中无效

struct Test {
    int x;
    int y;
};

void function(Test A, int n = A.x) {
    ...
}

因为默认参数A.x取决于A.有没有办法解决这个限制?我想要这样做的原因如下。我有一个类Vector,它与std :: vector非常接近,但有一个成员allocator_负责分配内存。我的拷贝构造函数有两个参数:

Vector(const Vector& A, Allocator& allocator) {
    ...
}

如果第二个参数具有默认值,则标准允许此类复制构造函数。但我希望分配器的默认值为A.allocator_,这就是我尝试过的原因

Vector(const Vector& A, Allocator& allocator = A.allocator_) {
    ...
}

不幸的是,它不是有效的C ++。你们中有没有人有解决这个问题的方法吗?

2 个答案:

答案 0 :(得分:8)

最简单的解决方案是使用重载而不是默认参数:

void function(Test A, int n) {
    ...
}

void function(Test A) {
    function(A, A.x);
}

答案 1 :(得分:0)

这样的事情怎么样? 你可以使用默认值,     void函数(Test A,int n = 0)     {         N = A.x;
        ...     }