I have a
map
that I would like to control access to so that if a pointer is put in the map, only a const pointer can be extracted. The following simple code illustrates the situation.
//-------------------- <snip> --------------------------
typedef std::mapstd::string,boost::any Properties;
template<typename T>
void
set( Properties& p, const std::string name, const T t )
{
p[name] = t;
}
template<typename T>
const T
get( const Properties& p, const std::string name )
{
const Properties::const_iterator iprop=p.find(name);
try{
const T t = boost::any_cast<const T>(iprop->second);
return t;
}
catch(const boost::bad_any_cast &){
throw std::runtime_error("bad cast");
}
}
int main()
{
Properties p;
int i=1;
set(p,"int",i);
set(p,"int*",&i);
int* j = get(p,"int*"); // I don't want this to compile
const int* k = get(p,"int*"); // I want this to compile fine.
}
//-------------------- </snip> -------------------------
Currently this whole code compiles without trouble, but I don't want to allow a non-const pointer to be extracted. Any ideas of how to accomplish this?
Thanks for any tips!