C++ 宏定义包括点?

标签 c++ c-preprocessor

我有一些无法更改的 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。

最佳答案

用一个宏和一个助手:

struct FunCaller {
    static auto bar() {FunCall();}
};

#define foo FunCaller{}

关于C++ 宏定义包括点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170813/

相关文章:

C++ Qt 多重定义

c++ - 数行和模数 C++

c++ - ofstream 中不需要的回车

c++ - Visual Studio 和 Natvis 不工作

字符串的 C char 到数组

c++ - 删除功能无法正常工作

c++ - 使用预处理器宏组合另一个宏调用

c++ - 我可以重新定义 C++ 宏然后重新定义它吗?

c# - 我可以在 C# 库中有全局预处理器定义吗?

c - GCC - 打印结构的定义