c 语言是一种静态语言,所以不存在类似 js 那种把字符串转化成函数的用法。如果你希望这么用,就必须自己定义一个结构来自己管理。
struct str2func {
char name[256];
int (*func)(int a, int b);
};
int fun(int a, int b) { return a+b; }
int Hello(int a, int b) { return a+b; }
int Hi(int a, int b) { return a+b; }
str2func funclist[] = {
{ "fun", fun },
{ "Hello", Hello },
{ "Hi", Hi },
};
这种用法比较笨拙,而且函数的参数必须相同,否则你就得用强制函数指针转换,总之是一种不是很推荐得做法。
===========================================================
如果用宏的化,倒是可以实现你的想法:
#include <iostream>
#include <string>
using namespace std;
#define Test(result, func, ...) if (func(__VA_ARGS__) == result) { cout << "ok
"; } else { cout << "error
"; }
string fun(string instr) {
if (instr == "hello")
return "Hi";
return "";
}
int main()
{
Test("Hi", fun, "hello"); // 输出 ok
Test("Hi", fun, "world"); // 输出 error
return 0;
}
跟你需求唯一不同的地方在于,结果放在了第一个,参数放最后。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…