繁体   English   中英

如何包装函数调用 C++ 以分配变量

[英]How to wrap a function call C++ to assign variables

有没有办法让一个函数执行不同的函数但独立于该函数执行相同的步骤?

这个例子可以更好地描述我的意思:

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);})

但这不起作用。

您可以通过复制或常量引用来传递函数...

int MyFunction( const std::function<int(void)> & fn )
{
    return fn();
}

int MyFunction2( std::function<int(int)> fn )
{
    return fn(7);
}

或者通过一个 Lambda

MyFunction([]{ return SomeIntFunction(); });

或对静态函数的引用

MyFunction(&StaticIntFunction);

或者绑定函数

MyFunction(std::bind(&Class::SomeIntFunction, classInstance));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM