我正在上课:
class mem
{
private:
char _memory[0x10000][9];
public:
const (&char)[9] operator [] (int addr);
}
我的目标是能够像数组一样使用mem
类,而后期实现会更复杂。所以,我应该能够
这就是我的尝试:
#include "mem.h"
const (&char)[9] mem::operator [] (int addr)
{
return &_memory[addr];
}
但是,它说方法“必须有一个返回值”,我认为我已将其定义为(&char)[9]
,但作为此定义,我收到错误消息“expect a identifier”。
答案 0 :(得分:5)
operator[]
是一个采用int
operator[](int addr)
返回引用
& operator[](int addr)
到长度为9的数组
(&operator[](int addr))[9]
const char
的
const char (&operator[](int addr))[9]
那就是说,不要这样做。使用typedef
来简化:
typedef const char (&ref9)[9];
ref9 operator[](int addr);
那就是说,也不要这样做。
std::array<std::array<char, 9>, 0x10000> _memory;
const std::array<char, 9>& operator[](int addr);
答案 1 :(得分:3)
写下面的方式
#include "mem.h"
const char ( & mem::operator [] (int addr) const )[9]
{
return _memory[addr];
}
你也可以添加一个非常数运算符
char ( & mem::operator [] (int addr) )[9]
{
return _memory[addr];
}
类定义看起来像
class mem
{
private:
char _memory[0x10000][9];
public:
const char ( & operator [] (int addr) const )[9];
char ( & operator [] (int addr) )[9];
}