我正在尝试为刚刚完成的c库提供c ++接口,我希望它可以编写
for (DBITable table = db.tables() ; table != NULL ; table++)
其中db
是一个带有tables()
方法的类,它返回与之关联的DBITable
。
编译时,clang++
出现以下错误
error: cannot increment value of type 'DBITable'
for (DBITable table = db.tables() ; table != NULL ; table++)
~~~~~^
这就是我实现++
运算符重载方法的方法
DBITable
DBITable::operator++()
{
return next();
}
并且它在DBITable
类中声明为
public:
DBITable operator++();
table != NULL
部分正如我所期望的那样工作
bool operator!=(void *)
{
// evaluate and get the value
return value;
}
答案 0 :(得分:10)
operator++()
是前缀增量运算符。将后缀运算符实现为operator++(int)
。
规范实现让前缀运算符返回引用,后缀运算符返回值。此外,您通常会根据前缀运算符实现后缀运算符,以避免意外和维护。例如:
struct T
{
T& operator++()
{
this->increment();
return *this;
}
T operator++(int)
{
T ret = *this;
this->operator++();
return ret;
}
};