gpt4 book ai didi

c++ - "Redirect"类成员函数?

转载 作者:行者123 更新时间:2023-11-30 00:56:47 24 4
gpt4 key购买 nike

基本上我发现自己今天写了很多如下代码:

#define VAL_1 0
#define VAL_2 1

class A {

public:
void memberA();
void memberB();

...

void write(uin32_t address);

}

void
A::
memberA() {

this->write(VAL_1);

}

void
A::
memberB() {

this->write(VAL_2);

}

...

所以基本上,我有一些“漂亮”的名字 memberA, memberB 用于一些真正只调用相同函数 write 的任务不同的说法。值 VAL_0VAL_1 不一定是使用我的类编写代码的已知值。 memberAmemberB 背后的实现细节也不是,尽管 write 可能会在某个时候公开。

基本上,现在我一遍又一遍地重复同一行代码this->write(...)。我正在寻找绕过此步骤并立即调用相应写入的解决方案。一种传递函数参数的方法,有点像来自基类的 C++ 构造函数,可能带有匹配的参数:

#define VAL_1 0
#define VAL_2 1

class A {

public:
bool memberA() : write(VAL_1);
bool memberB() : write(VAL_2);

...

bool write(uin32_t address);

}

我想知道 Boost.Bind 中是否有某些东西或一些聪明的模板编码可以让我实现这种或某些东西?

谢谢,

弗罗布

最佳答案

如果您在类定义中使您的 memberX 函数内联,并且如果您避免冗余的 this 引用,那么您就没有太多额外的东西要写:

你想要的(不正确的)语法:

bool memberA() : write(VAL_1);

实际(正确)语法:

bool memberA() { return write(VAL_1); }

如果你想尽量减少重复代码,你可以使用预处理器:

#define F(l, n) bool l() { return write(n); }
F(memberA, VAL_1)
F(memberB, VAL_2)
#undef F

此外,您可以使用预处理器 token 粘贴运算符##:

#define F(l, n) bool member##l() { return write(VAL_##n); }
F(A, 1)
F(B, 2)
#undef F

关于c++ - "Redirect"类成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487706/

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