用宏替换重复"if"块是否会降低C++中的代码复杂性?
Does replacing repititve "if" block with a macro reduce code complexity in C++?
我有一个问题。我需要重构代码的一部分以降低复杂性。我有多个类似的" IF"构造,在每个随机实用程序API调用后都重复出现,我需要回滚完成的交易或继续进行。我只是想知道替换"如果"结构是否会帮助我降低复杂性。我知道宏在代码中扩展,这就是为什么我不确定这种方法是否对我有帮助。我在重构代码方面很新。如果有人对重构有想法和知识可以向我提出某种方式,那真的很有帮助。就像更换下面的代码
retCode = certman_set_cmp_server_psk_refnum(ctx,(char*)domain.c_str(),NULL,NULL,0);
if (retCode != 0)
{
if(startedTxn == true)
{
status = ldapInterface.rollback_transaction();
if(0 != status)
{
clifwk_trace(session, "Rollback failed in internal transaction", CLIFWK_DEBUG);
syslog(LOG_ERR, "Rollback failed in internal transaction");
return CERTMAN_COMMIT_TRANSACTION_FAILED;
}
DEL_IF_NOT_NULL (ctx);
}
return retCode;
}
使用retCode = certman_set_cmp_server_ip_port(ctx,(char*)domain.c_str(),NULL,0);
CHECK_ROLLBACK_TRANSACTION(session,ctx,ldapInterface,retCode,startedTxn);
RETURN_IF_ERROR(retCode);
这种方法对我有助于减少复杂性吗?
您的复杂性问题似乎是由C 太少引起的。以宏的形式添加更多 c只会变得更糟。
例如, DEL_IF_NOT_NULL (ctx);
不是一个,而是两个三个标志。我认为这是if (ctx) delete ctx
构造。第一个危险信号是if
语句,该语句无需做任何事情。第二个危险信号是您使用原始指针,而不是依靠智能指针。这也将修复第三个危险信号,这是在0!=status
错误情况下未能清理的。
使用retcode
而不是异常引起类似的复杂性。
这是代码应该如此简单的:
std::unique_ptr<T> ctx = foo();
auto transaction = ldapInterface.get_transaction(); // will rollback unless committed
certman::set_cmp_server_psk_refnum(*ctx,domain,nullptr,nullptr,0);
transaction.commit();
相关文章:
- 具有未知值时的时间复杂性
- 关联容器的下界复杂性:成员函数与非成员函数
- 使用堆查找第K个最大元素的时间复杂性
- 并行标准::复制复杂性
- 特定算法的复杂性与 3 for?
- C++ 字符串类擦除成员函数的时空复杂性
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- C++ - 对象填充的复杂性
- 提高从排序字符串中获取字母顺序的顺序复杂性
- 从 long 转换C++位集构造函数的复杂性是多少?
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 向 std::list 添加新元素的复杂性
- 解决这个问题的时间复杂性是多少
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 对于像C++这样的现实世界语言,时间复杂性有什么一致的定义吗
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 学习时空复杂性时语句XYZ的含义是什么?
- 算法 std::include in c++ 的复杂性
- 标准的复杂性::地图::insert_or_assign提示