gpt4 book ai didi

c++ - 使用逗号运算符初始化基类

转载 作者:行者123 更新时间:2023-11-27 23:12:22 25 4
gpt4 key购买 nike

我破坏了构造函数中的逗号运算符,以便我可以预处理参数并使用处理后的参数进行初始化。

假设我有以下基类和派生类:

class Base
{
protected:
int i;
int j;
public:
Base(int a):i(a),j(a){}
Base(int a, int b):i(a),j(b){}
};

class Derived:public Base
{
private:
int d;
void inc(int & a) {a++;}
void inc(int & a, int & b) {a++; b++;}
public:
Derived(int a, int b, int c);
};

我知道我可以使用逗号运算符来处理参数并使用它来初始化基础部分,如下所示:

Derived::Derived(int a, int b, int c):Base((inc(a),a)),d(c){}

现在如果我想预处理两个参数并用它们来初始化基怎么办?我做了以下事情:

Derived::Derived(int a, int b, int c):Base((inc(a,b),(a,b))),d(c){}

但这不是我想要的,因为单参数基础构造函数仍将被使用(因为 (a,b) 也是一个返回 b 的逗号运算符>).如果不可能使用逗号运算符,是否有办法实现我想要的?

最佳答案

虽然这可以构成纯粹的意见,但我建议不要写这样的表达;你给维护者增加了额外的负担,让他们在调用实际函数之前弄清楚到底在执行什么;即使计算出函数接受的参数数量也需要一些努力,因为在该上下文中逗号通常仅用于分隔参数。

对于单个参数,我会这样做:

class Derived : Base {
static int computeSomething(int a) { return a+1; }

Derived(int a) :
Base(computeSomething(a)), ...
{ ... }
};

请注意,我正在返回一个新值。如果 a 的类型太昂贵而无法复制,它甚至可以通过引用获取和返回。

对于多个参数,所有参数都需要一次更新,我会更改基础以接收具有命名实体的整个参数包,或者可能是 std::tuple,然后执行就像单参数版本。

关于c++ - 使用逗号运算符初始化基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com