【发布时间】:2018-01-29 22:13:22
【问题描述】:
我有一个类可以读取/写入外部随机存取存储器。
.h 文件:
class RAM {
private:
bool Read(char *Buffer, size_t BytesToRead, uint32_t StartAddress);
bool Write(char *Buffer, size_t BytesToWrite, uint32_t StartAddress);
class proxy {
private:
size_t _index;
public:
proxy(size_t i);
void operator=(char rhs);
operator char();
}
public:
proxy operator[](size_t i);
};
.cpp 文件:
RAM::proxy RAM::operator[](size_t i) {
return proxy(i);
}
proxy::proxy(size_t i) {
_index = i;
}
void proxy::operator=(char rhs) {
Write(&rhs, 1, _index); // error
}
RAM::proxy::operator char() {
char Buf[1];
Read(Buf, 1, _index); // error
return Buf[0];
}
Read 和 Write 是处理对 RAM 的低级访问的函数。没有其他方法可以读取或写入 RAM。我尝试使用proxy class in rvalue - how to implement assignment operator?,但无法毫无错误地适应它:
错误:在没有对象 Write(&rhs, 1, _index) 的情况下无法调用成员函数 'bool RAM::Write(char*, size_t, uint32_t)'
错误:无法在没有对象 Read(Buf, 1, _index) 的情况下调用成员函数 'bool RAM::Read(char*, size_t, uint32_t)'
还有其他需要读取和写入的东西,所以我可能无法将它们设为静态。我还认为在创建 RAM 对象时它们已经被实例化了。
【问题讨论】:
-
如何从公共函数返回私有类型的对象?
-
你正在调用
RAM::Write来自类proxy,它不是它的成员。 -
你的
Read,Write函数应该是静态的。 -
proxy类型的对象和RAM类型的对象之间没有内在联系。为了调用RAM对象的成员函数,proxy对象必须具有指向RAM对象的指针或引用。只需添加一个,并在创建proxy对象时对其进行初始化。 -
@RichardCritten 类代理是 RAM 类的子类。它应该可以访问所有 RAM 类的函数和变量。
标签: c++