gpt4 book ai didi

c++ - 重载数组下标运算符

转载 作者:行者123 更新时间:2023-11-28 00:27:08 25 4
gpt4 key购买 nike

我正在尝试为从 mysql++ 库中的 mysqlpp::StoreQueryResult 继承的类提供自定义异常处理机制。但是我发现真正很难做的是找到一种方法来引用类中的实际对象,所以我无法正确使用 vector 操作 at() 来检索索引处的值。

这是标题

/* MySQLQueryResult.h */


#ifndef MYSQLQUERYRESULT_H
#define MYSQLQUERYRESULT_H

#include <mysql++.h>
#include <result.h>

namespace MinesScanner {

namespace MoonStone {

class MySQLQueryResult : public mysqlpp::StoreQueryResult {
public:

MySQLQueryResult();


MySQLQueryResult(const MySQLQueryResult &other);

MySQLQueryResult& operator=(const MySQLQueryResult &other);

mysqlpp::Row& operator[](int index);

private:

int _dat;



};

}

}

#endif /* MYSQLQUERYRESULT_H */

这是源文件

/* MySQLQueryResult.cpp */

#include "MySQLQueryResult.h"

namespace MinesScanner {

namespace MoonStone {

MySQLQueryResult::MySQLQueryResult( )
: StoreQueryResult( )
{
}

MySQLQueryResult::MySQLQueryResult( const StoreQueryResult &ob )
: StoreQueryResult( ob )
{
}

MySQLQueryResult& MySQLQueryResult::operator=( const StoreQueryResult &ob )
{

StoreQueryResult::operator=( ob ) ;
return *this ;

}

mysqlpp::Row& MySQLQueryResult::operator[]( int index )
{


try {

std::cout << " Called " << this->at( index ) << std::endl ;
return this->at( index ) ;
} catch ( std::exception& excpn_ob ) {
std::cerr << " Exception caught : " << excpn_ob.what( ) << std::endl ;
}


}


}

}

一个简单的用法示例将更清楚地显示我想要实现的目标。

#include "MySQLQueryResult.h"

int main() {
StoreQueryResult lisres = getMinesData( ( string ) row.at( 0 ) ) ; // returns StoreQueryResult object storing the result

cout << lisres[0][7] << endl; // outputs "Falkreath Stormcloak Mines"

MySQLQueryResult my_lisres = getMinesData( ( string ) row.at( 0 ) ) ; // returns StoreQueryResult object storing the result

cout << my_lisres[0][7] << endl; // ERROR!

}

所以我基本上想添加更多边界检查,检查空值,并使用 MySQLQueryResult 类中的 operator[] 处理 out_of_range 异常,但它不起作用。

我希望能够使用数组下标访问 MySQLQueryResult 对象。我得到的是垃圾值或段错误。请让我知道如何做到这一点

最佳答案

but its not working

看起来像你also need重载 const 版本的 subscript operator:

const mysqlpp::Row& operator[](int index) const;

关于c++ - 重载数组下标运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24469892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com