The name of an enum in C++ is a symbol, not a string. There isn't a way to map between a string and an enum value unless you provide that mapping yourself by writing a method such as:
EMISSION emission_to_string(const std::string& name)
{
if ( name == "EMISSION::EMIT1")
{
return EMISSION::EMIT1;
}
... etc
}
You would then get the value as a string from the property_tree and apply this mapping.
There are nicer ways to implement this which scale more elegantly with many enum values. I have done this using boost::bimap to enable a mapping from enum->string OR from string->enum, and of course this also gives you a map instead of a silly big if statement. If you do this, look into using boost::assign to initialise your static map, as it looks cleaner than other methods.