作为学习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编写一些包装器:

  • 在公共(public)接口(interface)中使用正确的constness并将其强制转换为内部所需的constness(如果确实需要)
  • 如果它会更有用,请另外创建C++接口(interface)
  • 10-07 18:53