C++ 如何将define(#define SOME_define)传递为函数的参数?
我尝试了语言特性,但没有找到方法,如何将define作为param传递给函数。 我知道,这不是最好的做法,只是纯粹的兴趣 我已经尝试过几种方法,至少泛型没有帮助 所以,我想做的是:C++ 如何将define(#define SOME_define)传递为函数的参数?,c++,C++,我尝试了语言特性,但没有找到方法,如何将define作为param传递给函数。 我知道,这不是最好的做法,只是纯粹的兴趣 我已经尝试过几种方法,至少泛型没有帮助 所以,我想做的是: #define SOME_DEFINE template <class T> void foo(T param) { if(param == SOME_DEFINE) do stuff } int main { foo(SOME_DEFINE); } 定义一些 模板 无效foo(T参
#define SOME_DEFINE
template <class T>
void foo(T param)
{
if(param == SOME_DEFINE) do stuff
}
int main
{
foo(SOME_DEFINE);
}
定义一些
模板
无效foo(T参数)
{
如果(param==SOME_DEFINE)做一些事情
}
int main
{
foo(一些定义);
}
感谢您。所缺少的只是您定义中的一个值 只需添加它,您就可以开始测试该功能
#include <iostream>
#define SOME_DEFINE 42
void do_all_the_things() {
std::cout << "woohoo!" << std::endl;
}
void do_none_of_the_things() {
std::cout << "darn" << std::endl;
}
template <class T>
void foo(T param) {
if (param == SOME_DEFINE) {
do_all_the_things();
} else {
do_none_of_the_things();
}
}
int main() {
foo(42);
foo(3);
return 0;
}
可能看起来很有效,但实际上只是比较指针,而不是内容。您可以通过将宏定义为std::string(“示例值”)
或使用专门的比较函数来解决此问题
#包括
#包括
#定义一些\u定义“测试值”
空做所有的事情(){
std::coutSOME_DEFINE
在预处理后计算结果为空。我不明白这个问题。您已要求预处理器将出现的标记SOME_DEFINE
替换为空,因此foo(SOME_DEFINE);
被编译为好像它是foo()
。你想在这里做什么?这听起来不对,因为预定义发生在编译时,但你的代码是动态运行的。如果你想在编译时控制代码,下面是它的样子。#定义一些#定义1…#如果一些#定义=1//做点什么#其他//做点其他#endif但是,只会编译代码的一部分ed。比起预处理器宏,我更喜欢使用正确的变量。@LexMarchenko当然!如果你打算将定义设置为字符串,我添加了一节来阅读。谢谢。我知道如何对字符串进行同样的设置,但我从来没有大量使用过定义,因此,这有点误解了它的工作原理。
const char* a = "value a";
const char* b = "value b";
return a == b;