
Hicham Mouline wrote:
hello,
I have a class A that holds a container of objects of type B indexed by int for e.g.
Typically, I have a function of A
class A { public: const B& getB(int <index> ) const; private: std::map< int, shared_ptr<B> > listOfBs_; };
The implementation of getB could be
const B& A::getB(int <index> ) const { //what to do if index not found }
A number of solutions I think of:
1. boost::optional
getB(int <index> ) const { } 2. change signature to const B* getB(int <index> ) const
3. Define a static const B notFoundB; const B& A::getB(int <index> ) const returns notFoundB when not found and have API users compare return value with notFoundB
I suppose the cheapest in overhead/performance is 2... optional must have some time overhead?
Are there advised solutions? Favourites in terms of style?
Regards,
There's always:
boost::shared_ptr<const B> get(int i) const
{
... // find iterator at key i
return (... != listOfBs.end())
? const_pointer_cast<const B>(*non_end_itr)
: boost::shared_ptr<const B>();
}
or better yet, you can fully encapsulate the internals of A, while
simplifying the class interface:
void A::visit(int i, boost::function