我有以下问题:
考虑一下我们有
#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。