C++ Macro Concatenation
C++ Macro Concatenation
我在理解 c++ 宏连接时遇到了一点麻烦。
目前,我有许多类共享同名的静态函数。例如:
ClassA::MyFunc1, ClassA::MyFunc2, ClassA::MyFunc3
ClassB::MyFunc1, ClassB::MyFunc2, ClassB::MyFunc3
ClassC::MyFunc1, ClassC::MyFunc2, ClassC::MyFunc3
我有一个接口,用于根据类型调用静态函数。例如:
ClassInterface::MyFunc1(Type)
{
switch (Type)
{
case TypeA:
{
ClassA::MyFunc1();
}
case TypeB:
{
ClassB::MyFunc1();
}
case TypeC:
{
ClassC::MyFunc1();
}
}
}
因此,这是通过单个接口按类型调用MyFunc1。所以很明显,如果我有 50 个类和 50 个静态函数,那么每次编写它们都会令人沮丧。
我正在尝试编写一个宏以节省大量时间。
#define MyMacro(x)
case TypeA:
{
ClassA::##x;
}
case TypeB:
{
ClassB::##x;
}
case TypeC:
{
ClassC::##x;
}
然后像这样使用它:
ClassInterface::MyFunc1(Type)
{
switch (Type)
{
MyMacro(MyFunc1)
}
}
但是,我收到一个错误,告诉我 x(在宏内(是一个未声明的标识符。谁能在这里帮我一把?
使用Visual Studio 2013...
错误 C2065:"x":未声明的标识符
错误C2143:语法错误:在"大小写"之前缺少";">
错误 C2039:"x":不是"A类"的成员
错误 C2039:"x":不是"B类"的成员
错误 C2039:"x":不是"类 C"的成员
无需使用 concat 运算符,您实际上也没有调用函数。
将宏更改为以下内容:
//EDIT: you probably want some breaks in there
// otherwise it could call all 3 functions
#define MyMacro(x)
case TypeA:
{
ClassA::x();
break;
}
case TypeB:
{
ClassB::x();
break;
}
case TypeC:
{
ClassC::x();
break;
}
相关文章:
- LPWSTR typedef and macro?
- 如何修复MSVC++(Microsoft Visual studio)中"macro overloading"的可变参数宏相关问题?
- CALLBACK macro (QT)
- Specific C++ Macro
- QT Macro q_slots'''类访问限制之后
- 如何在Macro BranchCallback中固定界限/更改变量界限?C
- Qt with Visual Studio macro issue
- Replacing __LINE__ macro
- how to #define c++ STL macro
- CMake C/C++ macro generating
- 为什么海湾合作委员会声称我违反了"at least one argument for variadic macro",而我至少有一个论点?
- c++ macro containing Q_OBJECT
- Mutex Protect Macro
- 动态变量上的c++MACRO未声明标识符
- Variadic Macro without __VA_ARGS__
- #ifdef macro
- Handling c++ wxWidgets EVT_MAXIMIZE macro
- 是“ Gnu-Zero-variadic-Macro-arguments”可靠地忽略
- C++ Macro Concatenation
- C++ concatenation in macro