我有以下问题:

考虑一下我们有

#define SET callMe
#define COLUMN(x) #x


在程序的主要部分,我们有以下几行:
SET(COLUMN(price)="hi");在预处理器运行后翻译为:

#callMe("price"="hi");


我需要函数callMe签名为callMe(string str),这样我们就必须做一些事情才能将"price"="hi"转换为"price=hi",并让callMe函数处理其余的问题。最后要说明的是,我描述的所有程序都是Table类的一部分。

我唯一的选择是将运算符=重载,因此"price"="hi"转换为所需的重载,但是我无法得到应该重载的内容,因为我首先想到做以下重载

#std::string operator=(std::string str)作为Table类的成员函数,但似乎无法正确执行。

关于如何实现所需操作的任何线索?

最佳答案

这对您有好处吗?

#define SECOND_PASS(x) callMe(#x)
#define COLUMN(x) x
#define SET(x) SECOND_PASS(x)


结果是:

callMe("price=\"hi\"");


这实质上使预处理器在转换为字符串之前删除COLUMN。

10-08 08:17