Image

Imagetangaroa wrote in Imagecpp

Exposing some class methods while hiding others

class UsefulClass  {
	public:
	usefulReadOnlyMethod(); // run me plz
	undesirableMethod();  // hide from coders 
};

class HasANotIsA {
	public:
	safeWrapper(){ foo->undesirableMethod(); } 

	protected: 
	UsefulClass foo; 
}


I want code using HasANotIsA to be able to run
foo->usefulReadOnlyMethod() but not foo->undesirableMethod().
I can put the usefulClass in protected to hide the undesirable
method, but that also hides the useful method. I can't take the
UsefulClass out of protected and make it public without exposing
the undesirable method.



Is there an alternative to wrapping every useful function
inside HasANotIsA? That feels like a waste of time and would
clutter up the class definition.



It seems that I want to change which methods of UsefulClass
are public and which are private, which suggests I should extend
the class, add a few wrappers where things change, and put the
wrapperMethod in the extended class. I could then make the
neutered class public in HasANotIsA. However, it is likely that
future code could reach undesirableMethod() by implicitly casting
it back to a UsefulClass during a general-purpose routine that
has the most basic class as a parameter. Can this be avoided
or discouraged?






To be more specific, "UsefulClass" is the STL vector and I want to
avoid code that uses STL methods to modify its contents.
The safewrapper() is to ensure nothing gets added or removed without
a corresponding removal or add to another vector, like in double-book
accounting.