0

我有一个模板类,称为OneCell,这里的定义:

template <class T>
class OneCell
{
.....
}

我有一个从OneCell到 T 的演员表操作员,在这里

operator T() const
{
    getterCount++;
    return value;
}

如您所见,我想在此方法中增加变量,但由于关键字const.

另一方面,如果我删除此关键字,则转换根本不起作用。

我能做些什么?

谢谢你,对我糟糕的英语感到抱歉。

4

2 回答 2

5

实际上operator T() const是一个const 成员函数,其中的this指针指向一个const对象,这反过来也产生了getterCount const

解决方法是声明getterCount为mutable,如下图:

mutable size_t getterCount;

现在getterCount可以在 const 成员函数中递增,这也意味着,即使对象是,它也可以递增const

void f(OneCell const & cell)
{
    //incrementing getterCount!
    ++cell.getterCount; //ok, even though cell is const!
}
于 2012-06-14T17:10:50.090 回答
3

如您所见,我想在此方法中增加变量,但由于关键字 const 出现错误。另一方面,如果我删除此关键字,则转换根本不起作用。

它会起作用,但仅适用于OneCell.

我能做些什么?

去吧mutable,假设你改变了按位常数而不是逻辑常数

mutable int getterCount;
于 2012-06-14T17:10:37.697 回答