如何将定义(#define some_define)作为函数的参数传递
How can i pass define (#define SOME_DEFINE) as parameter of the function?
好吧,我已经尝试了语言特征,但没有找到方法,我该如何将定义传递给函数作为param。我知道,这不是最好的做法,而只是纯粹的兴趣。
我已经尝试通过多种方式进行操作,至少仿制药没有帮助。
所以,我想做的是:
#define SOME_DEFINE
template <class T>
void foo(T param)
{
if(param == SOME_DEFINE) do stuff
}
int main
{
foo(SOME_DEFINE);
}
感谢您。
所缺少的只是您定义的值。
只需添加它,您就可以开始测试该功能。
#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;
}
对于字符串,它变得更加复杂。字符串文字,const char*
不能很容易比较。例如:
const char* a = "value a";
const char* b = "value b";
return a == b;
似乎有效,但实际上只是在比较指针而不是内容。您可以通过将宏定义为std::string("an example value")
或使用专门的比较函数来解决此问题。
#include <iostream>
#include <cstring>
#define SOME_DEFINE "test value"
void do_all_the_things() {
std::cout << "woohoo!" << std::endl;
}
void do_none_of_the_things() {
std::cout << "dang it" << std::endl;
}
template <class T>
struct AreEqual final {
bool operator () (T a, T b) const {
return a == b;
}
};
template <>
struct AreEqual<const char*> final {
bool operator () (const char* a, const char* b) const {
return std::strcmp(a, b) == 0;
}
};
template <class T, class AreEqualTo = AreEqual<T>>
void foo(T param, AreEqualTo are_equal_to = AreEqualTo()) {
if (are_equal_to(param, SOME_DEFINE)) {
do_all_the_things();
} else {
do_none_of_the_things();
}
}
int main() {
foo("test");
foo("test value");
return 0;
}
如果您正在学习语言,这是探索的另一条值得探索的途径。C 库中使用模板功能有很多功能。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称