C++ C++;简化代码
我只是有一个基本问题。这有可能进一步简化吗,因为我把这件事称为“sincos tan asin acos”和“atan”。它看起来很难看,如果可能的话,我想让它看起来很漂亮C++ C++;简化代码,c++,C++,我只是有一个基本问题。这有可能进一步简化吗,因为我把这件事称为“sincos tan asin acos”和“atan”。它看起来很难看,如果可能的话,我想让它看起来很漂亮 if(m_RHS->get_gType() == INT) { ostringstream ss; ss << (sin(m_RHS->evalint() * (M_PI / 180))); return ss.str(); } else
if(m_RHS->get_gType() == INT)
{
ostringstream ss;
ss << (sin(m_RHS->evalint() * (M_PI / 180)));
return ss.str();
}
else
{
ostringstream ss;
ss << (sin(m_RHS->evaldouble() * (M_PI / 180)));
return ss.str();
}
if(m_RHS->get_gType()==INT)
{
ostringstream ss;
ss evalint()*(M_PI/180));
返回ss.str();
}
其他的
{
ostringstream ss;
ss evaldouble()*(M_PI/180));
返回ss.str();
}
是,请尝试以下操作:
ostringstream ss;
double val;
if (m_RHS->get_gType() == INT){
val = m_RHS->evalint();
} else {
val = m_RHS->evaldouble();
}
ss << sin(val * (M_PI / 180));
return ss.str();
是的,试试这个:
ostringstream ss;
double val;
if (m_RHS->get_gType() == INT){
val = m_RHS->evalint();
} else {
val = m_RHS->evaldouble();
}
ss << sin(val * (M_PI / 180));
return ss.str();
ostringstreamss;
如果(m_RHS->get_gType()==INT)
ss evalint()*(M_PI/180));
其他的
ss evaldouble()*(M_PI/180));
返回ss.str();
这是最简单的ostringstream ss;
如果(m_RHS->get_gType()==INT)
ss evalint()*(M_PI/180));
其他的
ss evaldouble()*(M_PI/180));
返回ss.str();
这是最简单的元编程,例如:
template<typename T>
std::string sin_deg_str(T angle_deg)
{
ostringstream ss;
ss << (sin(angle_deg * (M_PI / 180)));
return ss.str();
}
// ...
if(m_RHS->get_gType() == INT)
return sin_deg_str(m_RHS->evalint());
else
return sin_deg_str(m_RHS->evaldouble());
元编程,例如:
template<typename T>
std::string sin_deg_str(T angle_deg)
{
ostringstream ss;
ss << (sin(angle_deg * (M_PI / 180)));
return ss.str();
}
// ...
if(m_RHS->get_gType() == INT)
return sin_deg_str(m_RHS->evalint());
else
return sin_deg_str(m_RHS->evaldouble());
我知道这是如何缩短的,但是如果我想添加cos、tan、asin、acos、atan,我认为这个实现不起作用。我可能大错特错了。在这种情况下,你能举一个使用cos、tan等的(目前很难看的)实现的例子吗。?您可能可以使用函数指针来简化它()对于注释来说有点长,所以我把它放在这里。您的案例块缺少
break代码>语句。按照您概述的“转换为<代码>双重
”策略,简化的方法是将代码分为两个阶段。首先,将值转换为双精度。第二,调用适当的trig函数。我知道它是如何缩短的,但是如果我想添加cos、tan、asin、acos、atan,我认为这个实现不起作用。我可能大错特错了。在这种情况下,你能举一个使用cos、tan等的(目前很难看的)实现的例子吗。?您可能可以使用函数指针来简化它()对于注释来说有点长,所以我把它放在这里。您的案例块缺少break代码>语句。按照您概述的“转换为<代码>双重
”策略,简化的方法是将代码分为两个阶段。首先,将值转换为双精度。第二,调用适当的trig函数。哦,这看起来很有趣。我可以试一试。我试过这种方法,但我犯了一些错误。我以前从未使用过模板函数,所以这是一个学习曲线。在.h文件中声明的模板只是我读过的。是吗?是的,它只是在.h文件中。我似乎有一个问题,它无法识别.cpp文件中的模板函数。我不知道你在说什么。你能说得更具体一点吗?哦,这看起来很有趣。我可以试一试。我试过这种方法,但我犯了一些错误。我以前从未使用过模板函数,所以这是一个学习曲线。在.h文件中声明的模板只是我读过的。是吗?是的,它只是在.h文件中。我似乎有一个问题,它无法识别.cpp文件中的模板函数。我不知道你在说什么。你能说得更具体些吗?
template<typename T, typename Function>
std::string call_deg_str(T angle_deg)
{
ostringstream ss;
ss << (Function(angle_deg * (M_PI / 180)));
return ss.str();
}
// ...
if(m_RHS->get_gType() == INT)
return call_deg_str<sin>(m_RHS->evalint());
else
return call_deg_str<sin>(m_RHS->evaldouble());