作为学习C++的练习,我创建了以下包装器类,该包装器封装了简单字符缓冲区的创建/销毁:
class BufferClass {
private:
char *mBufferPtr;
public:
BufferClass(int pSize)
: mBufferPtr(new char[pSize]) {}
virtual ~BufferClass() {
delete[] mBufferPtr;
}
operator char*() {
return mBufferPtr;
}
operator const char*() const {
return mBufferPtr;
}
};
如果在某些情况下我想创建此类的const实例(即,我无意在构造后就修改该对象),但必须将其与仅接受非const char *指针的C API结合使用(甚至认为它不会使数据发生变异),允许以下内容的普遍共识是:operator char*() const {
return mBufferPtr;
}
我意识到我可以只创建Buffer类的非常量实例,但是我会对这种方法的有效性感兴趣。 最佳答案
您应该正确设计您的类(class)。因此,如果这是const
成员函数,则它不应允许以任何方式修改对象的数据。与C API的兼容性不是此类的责任,因此,应在需要时在外部进行解析(const_cast
'inging,复制到另一个缓冲区,等等)。
另外,可能您可以为该C API编写一些包装器: