模板转换操作符,'const'关键字必需

时间:2012-06-14 17:08:21

标签: c++ templates casting const

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

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

我有一个从OneCell到T的转换运算符,这里是

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

如您所见,我想在此方法中增加变量,但由于关键字const而出现错误。

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

我该怎么办?

谢谢,抱歉我的英语不好。

2 个答案:

答案 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;