C++ 如何使用宏将代码放入函数中?
假设我有一个函数C++ 如何使用宏将代码放入函数中?,c++,C++,假设我有一个函数 void foo() { foo1(); } 我想要一个宏,我可以在其他地方使用,比如: ADD_FUNCTION_TO_FOO(foo2()); 因此,函数foo()将与编译器的类似: void foo() { foo1(); foo2(); } 这有可能实现吗?或者有没有其他办法 您不能修改函数。foo()的定义永远都是它所做的 但是您可以首先编写foo以进行扩展: #include <functional> #include <vector>
void foo()
{
foo1();
}
我想要一个宏,我可以在其他地方使用,比如:
ADD_FUNCTION_TO_FOO(foo2());
因此,函数foo()将与编译器的类似:
void foo()
{
foo1();
foo2();
}
这有可能实现吗?或者有没有其他办法 您不能修改函数。
foo()
的定义永远都是它所做的
但是您可以首先编写foo
以进行扩展:
#include <functional>
#include <vector>
#include <iostream>
std::vector<std::function<void()>> extra_callbacks_for_foo;
void foo1();
void foo()
{
foo1();
for (auto& cb : extra_callbacks_for_foo)
cb();
}
#define ADD_FUNCTION_TO_FOO(expr) \
(extra_callbacks_for_foo.push_back([&]() { (expr); }))
#包括
#包括
#包括
std::向量额外的\u回调\u用于\u foo;
void foo1();
void foo()
{
foo1();
用于(自动和cb:extra_callbacks_for_foo)
cb();
}
#定义将函数添加到函数(expr)\
(额外的回拨用于回拨([&](){(expr);}))
请参阅。不,这是不可能的。我的意思是,您可以首先编写
foo
,以获取默认为No op的lambda参数或类似的参数。但您不能重新打开函数并在以后更改它。您认为为什么要这样做?您应该真正更新foo
函数以执行您希望它执行的任何操作。如果这是不可能的,那么您应该清楚地解释您的问题、您的期望以及为什么您不能使用显而易见的解决方案,即(1)修复不完整的函数foo
或(2)定义一个函数foo_new
,该函数满足您的需求,并改为调用该函数。您已经假设您的解决方案是好的,而不是清楚地解释您想要实现什么,以便我们可以为您提供适当的解决方案。