C++ c++;使用函数对象进行代码重构
我有一些功能,可以根据启动时设置的值(在构造函数中)返回一个值。由于这些条件值只设置一次,我不想一直检查它们。 有没有办法只进行一次if检查,然后不使用函数对象或其他机制反复检查C++ c++;使用函数对象进行代码重构,c++,functor,C++,Functor,我有一些功能,可以根据启动时设置的值(在构造函数中)返回一个值。由于这些条件值只设置一次,我不想一直检查它们。 有没有办法只进行一次if检查,然后不使用函数对象或其他机制反复检查 class MyValue { bool myVal; //set only once in the constructor int myval1; //often updates int myval2; //often updates myValue(bool val, int v
class MyValue {
bool myVal; //set only once in the constructor
int myval1; //often updates
int myval2; //often updates
myValue(bool val, int val1, int val2)
{
myVal = val; // only place where myVal is set
// this value changes often in other functions not shown here
myval1 = val1;
// this value changes often in other functions not shown here
myval2 = val2;
}
int GetMyValue() //often called
{
if(myval) /* Is there a way I dont have to do an if check here?
and simply write a return statement? */
return myval1;
return myval2;
}
};
使用指针:
class MyValue
{
int* myVal;
int myval1; //often updates
int myval2; //often updates
myValue(bool val, int val1, int val2)
{
if (val) {
myVal = &myval1;
} else {
myVal = &myval2
}
myval1 = val1;
myval2 = val2;
}
int GetMyValue() //often called
{
return *myval;
}
};
(或者最好是Rabbi76答案中的引用)使用引用
myval1
或myval2
的成员,引用必须在构造函数中初始化一次:
class MyValue
{
bool myVal; //set only once in the constructor
int myval1; //often updates
int myval2; //often updates
int &valref;
public:
MyValue( bool val, int val1, int val2 )
: myVal( val )
, myval1( val1 )
, myval2( val2 )
, valref( val ? myval1 : myval2 )
{}
int GetMyVal() { return valref; }
};
您可以只使用一个值
int-myval
并使用myval=val设置它吗?val1:val2代码>在构造函数中,“启动时设置一次”在编译时是否已知?相关:你能使用C++11吗?不要过早地进行优化。分支预测创造奇迹。这就是说,你可以有一个指向一个或另一个的指针,在构建时设置它,然后返回derefrence。是的,我可以使用c++11。该值在编译时是未知的,因为它基于用户输入。myval1和myval2都需要单独存储,因为它们还有其他用途。好的,这些信息最初是不存在的。您可以根据bool
参数设置指向感兴趣的int的指针,并使用GetMyValue
return*ptrToCorrectMyVal
我不希望引入新的全局变量。函数对象在这种情况下有帮助吗?我想您仍然需要一个变量来存储函数对象实例。我可以存储函数对象实例。@bsobaid:存储函数对象实例如何比存储int*
更好?