使函数根据参数选择接口
Making a function to choose an interface depending on arguments
我想用 C 编写一个函数来选择另一个,也许这个 C 伪代码可以帮助澄清我想要什么:
void set_method(const char *method)
{
// Check if the method is serial_port
if (strcmp(method, "serial_port") == 0)
{
// assign the alias "print" to serial_print
// something like defing here a function like this:
// print(const char *print) { serial_print(print); }
print(const char *print) = serial_print(const char *message)
}
else if (strcmp(method, "graphical_tty") == 0)
{
// The same that serial_port case but with graphical_tty_print
}
else
{
// Error
}
}
目标是在满足条件的情况下将 "alias" 分配给函数,我该怎么做?
我为此使用独立的 C 实现,使用 clang 编译。
如果函数签名相同,您可以使用函数指针数组。举个例子,这就像
typedef int (*fptr)(int);
fptr fa[5];
int f1(int);
int f2(int);
fa[0]=f1;
fa[1]=f2;
....
然后根据比较调用其中任意一个。并将此数组传递给函数并调用它的元素,甚至您可以将其设为全局数组,然后在函数中使用它。
void set_method(const char *method, fptr fp[]){
if (strcmp(method, "serial_port") == 0){
(*fp[0])();
}
...
}
您似乎在寻找函数指针。看下面的代码,里面介绍了要调用的函数类型,该类型函数的全局指针,以及根据你的逻辑分配合适函数的代码:
typedef int (*PrintFunctionType)(const char*);
int serial_print(const char *message) { printf("in serial: %s\n", message); return 0; }
int tty_print(const char* message) { printf("in tty: %s\n", message); return 0; }
PrintFunctionType print = serial_print; // default
void set_method(const char *method)
{
// Check if the method is serial_port
if (strcmp(method, "serial_port") == 0) {
print = serial_print;
}
else if (strcmp(method, "graphical_tty") == 0) {
print = tty_print;
}
else {
// Error
}
}
int main() {
print("Hello!");
set_method("graphical_tty");
print("Hello!");
}
//Output:
//
//in serial: Hello!
//in tty: Hello!
希望对您有所帮助:-)
我想用 C 编写一个函数来选择另一个,也许这个 C 伪代码可以帮助澄清我想要什么:
void set_method(const char *method)
{
// Check if the method is serial_port
if (strcmp(method, "serial_port") == 0)
{
// assign the alias "print" to serial_print
// something like defing here a function like this:
// print(const char *print) { serial_print(print); }
print(const char *print) = serial_print(const char *message)
}
else if (strcmp(method, "graphical_tty") == 0)
{
// The same that serial_port case but with graphical_tty_print
}
else
{
// Error
}
}
目标是在满足条件的情况下将 "alias" 分配给函数,我该怎么做?
我为此使用独立的 C 实现,使用 clang 编译。
如果函数签名相同,您可以使用函数指针数组。举个例子,这就像
typedef int (*fptr)(int);
fptr fa[5];
int f1(int);
int f2(int);
fa[0]=f1;
fa[1]=f2;
....
然后根据比较调用其中任意一个。并将此数组传递给函数并调用它的元素,甚至您可以将其设为全局数组,然后在函数中使用它。
void set_method(const char *method, fptr fp[]){
if (strcmp(method, "serial_port") == 0){
(*fp[0])();
}
...
}
您似乎在寻找函数指针。看下面的代码,里面介绍了要调用的函数类型,该类型函数的全局指针,以及根据你的逻辑分配合适函数的代码:
typedef int (*PrintFunctionType)(const char*);
int serial_print(const char *message) { printf("in serial: %s\n", message); return 0; }
int tty_print(const char* message) { printf("in tty: %s\n", message); return 0; }
PrintFunctionType print = serial_print; // default
void set_method(const char *method)
{
// Check if the method is serial_port
if (strcmp(method, "serial_port") == 0) {
print = serial_print;
}
else if (strcmp(method, "graphical_tty") == 0) {
print = tty_print;
}
else {
// Error
}
}
int main() {
print("Hello!");
set_method("graphical_tty");
print("Hello!");
}
//Output:
//
//in serial: Hello!
//in tty: Hello!
希望对您有所帮助:-)