Вы можете попытаться изменить дизайн вашего 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();
Предоставляя функции, которые определяют, какие операции являются константными, а какие нет, вы можете избежать дублирования вашего Foo
и получить ограничения на корректность констант, к которым вы, похоже, стремитесь.