gpt4 book ai didi

C++ 宏连接

转载 作者:行者123 更新时间:2023-11-28 06:32:28 25 4
gpt4 key购买 nike

我在理解 C++ 宏连接时遇到了一些困难。

目前,我有许多共享同名静态函数的类。例如:

ClassA::MyFunc1, ClassA::MyFunc2, ClassA::MyFunc3
ClassB::MyFunc1, ClassB::MyFunc2, ClassB::MyFunc3
ClassC::MyFunc1, ClassC::MyFunc2, ClassC::MyFunc3

我有一个接口(interface),用于根据类型调用静态函数。例如:

ClassInterface::MyFunc1(Type)
{
switch (Type)
{
case TypeA:
{
ClassA::MyFunc1();
}

case TypeB:
{
ClassB::MyFunc1();
}

case TypeC:
{
ClassC::MyFunc1();
}
}
}

所以这是为了通过单一接口(interface)按类型调用 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...

error C2065: 'x': 未声明的标识符

错误 C2143:语法错误:缺少“;”在“案例”之前

error C2039: 'x': 不是 'ClassA' 的成员

error C2039: 'x': 不是 'ClassB' 的成员

error C2039: 'x': 不是 'ClassC' 的成员

最佳答案

无需使用 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; \
}

关于C++ 宏连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307674/

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