gpt4 book ai didi

c++ - 检查结果时减少 if 语句

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:08 26 4
gpt4 key购买 nike

我的 C++ 函数有很多 if 语句检查被调用函数的返回值:

Result func(...){

if (SUCCESS != func1(...))
return ERROR;

// do something

if ( SUCCESS != func2(...))
return ERROR;

// do something else

if (SUCCESS != func3(...))
return ERROR;

// do something
.
.
.

}

这里是否有消除或减少 if 语句的方法?例如我想要这样的东西:

Result func(...){

Result result = SUCCESS;
when (result != SUCCESS) return ERROR;
result = func1(...);
// do something
result = func2(...);
// do something else
result = func3(...);
// do something
.
.
.

}

最佳答案

我无法帮助自己,但编写可能被认为是过度工程的解决方案,但它允许为所有结果准备单个模板类(供将来使用),然后最小化实际使用的代码(无需使用检查方法或宏,除了这个单一的结果持有者模板类之外,不需要编写自己的包装器)。享受 :D。

#include <iostream>

template<class T>
class Result
{
public:

Result() :
m_value(),
m_badValue()
{

}

Result(const T& value, const T& badValue) :
m_value(value),
m_badValue(badValue)
{

}

void operator=(const T& value)
{
if(value == m_badValue)
{
throw "Bad Value!";
}
else
{
m_value = value;
}
}

operator const T&() const
{
return m_value;
}

const T& value() const
{
return m_value;
}

private:

T m_value;
T m_badValue;
};

static const int SUCCESS = 0;
static const int FAIL = -1;

int func1()
{
return SUCCESS;
}

int func2()
{
return SUCCESS;
}

int func3()
{
return FAIL;
}

int main()
{
Result<int> result(FAIL, FAIL);

try
{
result = func1();
result = func2();
result = func3();
}
catch (const char *error)
{
::std::cout << "Error: " << error << ::std::endl;
}

::std::cout << "Last value: " << static_cast<int>(result) << " - " <<
((result == SUCCESS) ? "SUCCESS" : "FAIL") << ::std::endl;
}

注意:您应该只抛出派生自 ::std::exception 的内容,但我使用 const char* 来简化事情并准备工作示例。

关于c++ - 检查结果时减少 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23907319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com