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

yon*_*oni 0 c++ templates casting const

我有一个模板类OneCell,在这里定义:

template <class T>
class OneCell
{
.....
}
Run Code Online (Sandbox Code Playgroud)

OneCell在这里有一个从T到T 的演员

operator T() const
{
    getterCount++;
    return value;
}
Run Code Online (Sandbox Code Playgroud)

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

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

我能做什么?

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

Naw*_*waz 5

实际上operator T() const是一个const-member函数,其中this指针指向一个const对象,该对象依次生成getterCount const.

解决方案是声明getterCount为可变,如下所示:

mutable size_t getterCount;
Run Code Online (Sandbox Code Playgroud)

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

void f(OneCell const & cell)
{
    //incrementing getterCount!
    ++cell.getterCount; //ok, even though cell is const!
}
Run Code Online (Sandbox Code Playgroud)

  • @DavidRodríguez-dribeas也许他转换的对象是const?他没有表明他在哪里使用它. (2认同)