Re: Heterogeneous collection: return type overload
On Feb 18, 6:50 am, jrbcast <jrbc...@gmail.com> wrote:
On Feb 17, 7:59 pm, "Leigh Johnston" <le...@i42.co.uk> wrote:
"jrbcast" <jrbc...@gmail.com> wrote in message
news:ae30bbcc-2fea-413d-9696-ad036be5d29d@f15g2000yqe.googlegroups.com...
Imagine I have something like this:
class Collection
{
std::map<char *, void *> elements;
Using a char* as a key in a map is probably not a very good
idea.
Collection();
Try "std::map<std::string, boost::any> elements;" instead.
Thanks for your responses. Now it is clear that C++ does not
support function overloading on return types :-(.
Not directly, but it's fairly simple to get the same effect by
means of a proxy:
class Collection
{
public:
class Proxy
{
Collection const* owner;
std::string key;
public:
Proxy(Collection const& owner, std::string const& key)
: owner(&owner)
, key(key)
{
}
template< typename T > operator T() const
{
return owner->... // whatever it takes to get
// the correctly typed value
}
}
Proxy get(std::string const& key) const
{
return Proxy(*this, key);
}
// ...
};
--
James Kanze