C++ 如何将define(#define SOME_define)传递为函数的参数?

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作为param传递给函数。 我知道,这不是最好的做法,只是纯粹的兴趣

我已经尝试过几种方法,至少泛型没有帮助

所以,我想做的是:

#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::cout
SOME_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;