gpt4 book ai didi

C++宏问题(逗号,的解释)

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:56 25 4
gpt4 key购买 nike

下面的代码可以正常编译。

#define CMD_MACRO(pp, cmd)  \
{ \
if (pp)\
{ cmd; } \
}

template<class T> void operate_on(T &data, char c) {
data=data+1;
};

int main() {
int book=4;
char c;
CMD_MACRO(book, {
operate_on<int>(book, c);
});
};

请注意,我代码中的实际宏更为复杂,我给出了一个可能没有太多逻辑意义的简化版本

现在,如果我在函数中添加另一个模板参数,它会给出编译错误(代码注释中解释的问题):

template<class T, bool b> void operate_on(T &data, char c) {
data=data+1;
};
int main() {
int book=4;
char c;
CMD_MACRO(book, {
operate_on<int, false>(book, c); /* here the "," between int and
false is being treated
as separating arguments to CMD_MACRO,
instead being part of 'cmd'. Thats strange
because the comma separating book and c is
treated fine as part of 'cmd'. */
});
};


test.cpp:18:6: error: macro "CMD_MACRO" passed 3 arguments, but takes just 2
test.cpp: In function 'int main()':
test.cpp:16: error: 'CMD_MACRO' was not declared in this scope

如何解决这个问题(我需要将那个额外的模板参数添加到现有代码中,但出现了这样的错误)。

最佳答案

你试过了吗:(operate_on<int, false>(book, c)); ? (注意表达式周围的额外括号)。

我相信预处理器对 C++ 模板一无所知,因此对待 <>就像任何旧 token 一样。如果没有额外的括号,它会处理 operate_on<int作为一个参数,false>(book, c)作为另一个。

关于C++宏问题(逗号,的解释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com