我有一个模板类,名为OneCell
,这里的定义是:
template <class T>
class OneCell
{
.....
}
我有一个从OneCell
到T的转换运算符,这里是
operator T() const
{
getterCount++;
return value;
}
如您所见,我想在此方法中增加变量,但由于关键字const
而出现错误。
另一方面,如果我删除此关键字,则转换根本不起作用。
我该怎么办?
谢谢,抱歉我的英语不好。
答案 0 :(得分:5)
实际上operator T() const
是 const-member 函数,其中this
指针引用const
对象,后者依次生成 getterCount const
。
解决方案是将getterCount
声明为可变,如下所示:
mutable size_t getterCount;
现在getterCount
可以在const成员函数中递增,这也意味着,即使对象是const
,它也可以递增:
void f(OneCell const & cell)
{
//incrementing getterCount!
++cell.getterCount; //ok, even though cell is const!
}
答案 1 :(得分:3)
如您所见,我想在此方法中增加变量,但是因为关键字const而出现错误。另一方面,如果我删除此关键字,则转换根本不起作用。
它会起作用,但仅限于OneCell
的可变实例。
我该怎么办?
转到mutable
,假设您更改按位常量而不是逻辑常量。
mutable int getterCount;