gpt4 book ai didi

c++ - 将两个宏组合成一个/创建一个在两个静态代码片段之间插入代码的宏?

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:07 25 4
gpt4 key购买 nike

我正在开发一个非常小的库,它将允许最终用户创建“命令”,可以通过在另一个函数中提供字符串来调用这些命令,例如 call("this_function",params);

我做得很好,但是使用它的代码很丑陋:

#define begin(x) \
class x\
{\
x(){/*some code*/}\
void some_function_the_macro_has_to_make()

#define end() \
}

begin(hello_world)
{
/*do something*/
}
end();

我不知道如何在两个带有宏的片段之间插入代码,这可能吗?

(而且我对如何在没有宏的情况下完成此操作的知识更少......)

所以我可以这样做:

#define begin(x){y} \
class x\
{\
x(){/*some code*/}\
void some_function_the_macro_has_to_make()\
{\
y\
}\
};

begin(hello_world)
{
/*do something*/
}

?

如果不是,是否可以不使用宏而是一些特殊的 C++ 东西?


编辑:
下面的示例似乎有效,但它没有实现我在这个问题的第二个代码示例中想要的:

#define begin(x,y) \
class x\
{\
x(){/*some code*/}\
void some_function_the_macro_has_to_make()\
{\
y\
}\
};

begin(hello_world,
int x = 0;
std::cout << "x:" << x;
);

//it would be preffered to have:
begin(hello_world)
{
int x = 0;
std::cout << "x:" << x;
}

最佳答案

我不确定我是否完全理解您的目标,但我认为您希望避免使用 end() 宏。

如果是这种情况,您可以更改宏以在 class 声明之外定义方法。

#define begin(x) \
class x\
{\
x(){/*some code*/}\
void some_function_the_macro_has_to_make(); \
}; \
inline void x::some_function_the_macro_has_to_make ()

现在,您可以像这样使用它:

begin(hello_world) {
int x = 0;
std::cout << "x:" << x;
}

不过,我建议您考虑使用带有仿函数模板参数的模板。在您继续下一件大事之后,代码对于必须维护代码的人来说可能会更容易理解。类似的东西:

template <typename ACTION>
class ActionT
{
ACTION action_;
public:
ActionT() : action_() {/*some code*/}
void some_function () { action_(); }
};

struct hello_world_action {
void operator () () {
int x = 0;
std::cout << "x: " << x << std::endl;
}
};

typedef ActionT<hello_world_action> hello_world;

如果 class 有多个 Action 要执行,这会更自然地扩展。

关于c++ - 将两个宏组合成一个/创建一个在两个静态代码片段之间插入代码的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492355/

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