作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
之前的问题描述有歧义,所以我在下面修改了一些东西。谢谢。
我想像这样实现一些宏:
#define AddVariable(x) \
#define x (++counter)
class Base {
private:
int counter = 0;
}
class Extend : public Base {
public:
void Handler() {
AddVariable(ASDF);
AddVariable(HJKL);
// Here may add more variables.
}
void AnotherHandler() {
// It calls ASDF, HJKL too.
}
}
ASDF 和 HJKL 应该可以通过 cpp 文件中的所有处理程序使用,因此我必须在宏中定义它(尽管这不是一个好的设计)。但是我应该如何编写适当的宏来实现它(#define 不能嵌套在另一个#define 中)?还是有其他更好的实现方式?
提前致谢。
更新:
一个潜在的实现是
#define AddVariable(x) \
int x = ++counter;
它可以工作,但 x 不是全局的,我必须解决这个问题。
最佳答案
看起来您正试图将一个增量器暴露给 Base
对象的 counter
到 .cpp 文件中的所有函数。
回答:这是不可能的。
.cpp 文件中的其他函数/对象没有对 Base
对象的引用,因此无法更改它的任何数据。
如果您想为所有 Base
对象维护一个单个计数器,您可以尝试这样的事情:
class Base {
public:
static void ASDF(){counter++;}
private:
static int counter = 0;
};
这可以从其他函数调用:
void AnotherHandler() {
Base::ASDF();
}
编辑:
class Base {
protected:
static int counter = 0;
};
class Another : public Base{
public:
Another(){
counter++; // As a child of Base you have access to all of it's protected variables
}
}
关于c++ - 如何在另一个#define 中实现#define?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27528030/
我是一名优秀的程序员,十分优秀!