【发布时间】:2021-11-07 03:05:21
【问题描述】:
有没有办法让一个函数执行不同的函数但独立于函数执行相同的步骤?
这个例子更能说明我的意思:
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
if (!SQL_SUCCEEDED(ret)) {
printf("SQL Failed\n");
DisplayError(SQL_HANDLE_STMT, stmt);
}
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (!SQL_SUCCEEDED(ret)) {
printf("SQL Failed\n");
DisplayError(SQL_HANDLE_STMT, stmt);
}
除了我的特定需求之外,我想不出更一般的例子,但这里的共同点是我总是检查 SQL 函数的返回变量是否错误,如果是,打印说错误。我觉得如果可以将错误检查包装在debug 模式中,并在release 模式中剥离它会更好,但我不知道该怎么做。我希望有一个类似的答案
SQL(ret, SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env));
如果将整个调用包装在已定义的 SQL 函数中,则会调用传入的任何 sql 函数,并将其分配给变量,只要返回类型相同。
我试图想出诸如
之类的东西#define SQL(a, x) (a = x; if (!SQL_SUCCEEDED(a)) { printf("SQL Failed\n"); DisplayError(SQL_HANDLE_STMT, stmt);})
但这不起作用。
【问题讨论】:
-
你可以尝试用一个函数的参数来实现这个SQL函数。 (geeksforgeeks.org/passing-a-function-as-a-parameter-in-cpp)
-
我不知道该怎么做,我需要调用的不同 SQL 函数具有可变数量的参数和这些参数的可变类型。
-
你使用一个没有参数的简单函数,当你调用这个函数时,你使用一个 lambda 来包裹它
-
@RaduSebastianLAZIN 我在某处看到这种类型的东西存在于它是 OpenGL 函数的地方,它类似于 GL(X),它调用了传入的任何 opengl 函数 (x) 但我可以'找不到它或记得如何。