检查私有成员变量是否在一定范围内,如果没有调整
Check whether private member variable is between certain range and if not adjust it
我试图将私有成员变量限制在 0 到 1 之间memVar
。如果 memVar 的值小于 0,我希望它设置为 0,如果它大于 1,它应该设置为 1。因此,我想实现一个函数limitMemVar
每次设置或更改 memVar 时都会调用该函数。该函数在我的类的模板函数中调用。
我的类看起来像这样:
class Box {
private:
double memVar;
public:
// Member functions declaration
void limitMemVar(double actValue);
template <typename T>
void DoSomething(const couble val);
};
我实现的函数看起来像这样:
void Box::limitMemVar(double actValue) {
if ( actValue< (double)0 )
{
this->memVar= (double)0;
}
else if ( actValue > (double)1 )
{
this->memVar= (double)1;
}
}
模板函数如下所示:
template<typename T>
void Box::DoSomething(const double val)
{
//assign memVar the value of val
memVar=val;
//check memVar
this->limitMemVar(this->memVar)
// .... Do more Stuff
}
它是一个更大的软件项目的一部分。我可以构建并运行它,但所有memVar
的结果都是 nAn。
但是当我直接将其硬编码到模板函数中时,它会起作用,如下所示:
template<typename T>
void Box::DoSomething(const double val)
{
//assign memVar the value of val
memVar=val;
//check memVar
if ( memVar< (double)0 )
{
memVar= (double)0;
}
else if ( memVar> (double)1 )
{
memVar= (double)1;
}
// .... Do more Stuff
}
怎么了? 我想这是一项非常简单的任务,但我是C++新手,所以任何帮助都值得赞赏。 谢谢你的时间!
>std::clamp
就是你要找的。
相关文章:
- c++ 变量在宏的扩展中没有在这个范围内声明
- 检查私有成员变量是否在一定范围内,如果没有调整
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 困惑,为什么没有在此范围内声明 c++ 全局变量
- C++,'time'没有在这个范围内声明,没有理由
- 为什么即使在启用 C++11 并且我包含字符串之后,'stod'仍然没有在此范围内声明?
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- 有没有一种标准方法来确保一段代码在全局范围内执行
- QT QOverload没有在Travis CI上声明在这个范围内
- C++。可以在没有错误的情况下执行此操作:"未在此范围内声明"
- C 错误:在公众之后,没有在此范围内声明此范围
- "stoi"没有在此范围内声明,即使添加 -std=c++0x 和自定义函数,仍然适用
- -O1/2/3 与 -std=c++1y/11/98 - 如果包含,<cmath>我收到错误:"_hypot"未在此范围内声明
- "glCreateShader"没有在此范围内声明?
- TOKEN_ELEVATION_TYPE没有在这个范围内声明,我做错了什么?
- “GL_VERTIEX_SHADER”没有在这个范围内声明 - 当它是< - 这是一个错字
- 臭名昭著的'function'没有在这个范围内宣布
- 如果左值不再在其定义范围内使用,编译器是否允许将左值转换为右值引用
- 如果在系统范围内禁用,则激活窗口的主题