0

结构 Foo { char * DataPtr; };

class ISomeInterface {
public:
    Foo GetFoo( ) const;
    Foo GetFoo( );
};

Foo::DataPtr是指向对象的内部缓冲区的指针ISomeInterface。有没有办法确保Foo::DataPtrconst 版本返回的ISomeInterface::GetFoo是 a const char *

4

3 回答 3

5

你需要一个

struct ConstFoo {
   const char* DataPtr;
};

为了这。C++ 中的 const 不是传递的。(这也是为什么你有iteratorand const_iterator。)

于 2010-02-26T10:53:40.437 回答
1

一个结构

struct Foo {  
    char * DataPtr;  
}

不一样

struct Foo {  
    const char * DataPtr;
}

所以你无法区分你想要的方式。

您可以使 constGetFoo()返回一个 constFoo对象(我怀疑这不是您想要的,因为它会使所有成员变量都变为 const),或者使用在 const 调用中返回的const char * DataPtr(say ) 创建另一个结构。FooConst

于 2010-02-26T10:51:58.223 回答
0

您可以尝试更改您的设计Foo并“隐藏”对DataPtr背后功能的访问。例如:

class Foo {
    char * DataPtr;
public:
    //just some examples
    void doThis() const {}
    void doThat() {}
}; 

class ISomeInterface {
public:
    const Foo GetFoo( ) const { return Foo(); }
    Foo GetFoo( ) { return Foo(); }
}; 

...

const Foo foo1 = ISomeInterface().GetFoo();
foo1.doThis();
foo1.doThat(); //error
Foo foo2 = ISomeInterface().GetFoo();
foo2.doThis();
foo2.doThat();

提供定义哪些操作是 const 和那些不是您的函数可以避免重复您的操作Foo并获得您似乎瞄准的 const 正确性限制。

于 2010-02-26T13:18:22.143 回答