Jam*_*mes -1 c++ c-preprocessor
当我们在c ++中传递类类型的参数时,我们别无选择,只能使用#define.但这会使代码变得混乱.
#include <vector>
#define APPEND(className) \
base = new className(); \
baseVector.push_back(base); \
class Base{};
class Child1 : public Base{};
class Child2 : public Base{};
// ...
class Child10 : public Base{};
std::vector<Base*> baseVector;
int main(void){
Base* base; // I want to remove this
APPEND(Child1);
APPEND(Child2);
// ...
APPEND(Child10);
}
Run Code Online (Sandbox Code Playgroud)
如果我将Base*base放在#define语法中,则会发生重新声明错误.但是,如果我愿意的话,它看起来很尴尬.
#define APPEND(className) \
#ifndef DECL \
Base* base; \
#define DECL \
#endif \
base = new className(); \
baseVector.push_back(base); \
Run Code Online (Sandbox Code Playgroud)
这是不可能的.有没有办法实现这个目标?
首先,你的代码甚至都没有编译.这是一个固定版本:
#include <vector>
class Base{};
class Child1 : public Base {};
class Child2 : public Base {};
std::vector<Base*> baseVector;
int main(void)
{
baseVector.push_back( new Child1 );
baseVector.push_back( new Child2 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你绝对不需要任何#define技巧.这几乎总是不好的做法,当然在你的情况下.
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |