【发布时间】:2016-11-05 08:45:54
【问题描述】:
我有一些无法更改的 C++ 代码,只能通过更改头文件来更改。我有代码,可以编译。
问题是我定义了一个类似这样的函数指针(函数指针与我想要做的事情无关):
foo.bar();
我想用宏或其他东西将其更改为:
#define foo.bar() FunCall()
据我了解的问题是不能在宏中使用点,还有其他方法吗?
编辑:
更多信息。我得到的代码旨在运行单个实例,但是我包装代码以在一个类中运行多个实例。这让我很头疼。
我正在尝试的是使用宏和一些内联函数或完整的第三种方式:
void function()
{
foo.bar();
}
我需要一些可以使上述代码等同于:
void class::function()
{
EventFuncTypedef f = foo.bar;
(this->*f)();
}
或者
void class::function()
{
class::FunCall();
}
上面所有代码的问题是尝试让原始代码执行选项 1 或 2。
【问题讨论】:
-
用
FunCall()实现函数bar()创建一个struct,并创建一个全局变量foo。然后foo.bar()成为对FunCall()的函数调用。好吗? -
你无法摆脱这个点。您只能以或多或少的创造性方式使用它。
-
严格是不可能的,这实际上是已经存在的。我得到的代码被创建为作为单个实例运行,我试图将整个代码包装到一个用于多个实例的类中。这使成员函数指针变得复杂。我正在尝试新的创意方式来包装它
-
我无法想象可以修改标头并重新编译但不能修改源代码的上下文。您是否知道您尝试的“解决方案”是多么邪恶和肮脏?虽然这看起来很狡猾,但有 1000 种方法可能会导致可怕的错误,让您在调试中花费数天时间。
标签: c++ c-preprocessor