Соберите свой собственный шаблон поверх лексического броска наддува для разбора. Обратите внимание на параметр «по умолчанию» в примере, чтобы обеспечить корректную перегрузку (не стесняйтесь использовать другое средство, если хотите).
template<typename T>
T Parse(const std::string& valStr, const T& default=T()) {
T result = boost::lexical_cast<T>(valStr);
}
Затем вы можете специализироваться на НИЧЕМ, включая bools:
template<>
bool Parse(const std::string& valStr, const bool& default=true) {
if(strcmp(valStr.c_str(), "true") == 0) {
return true;
}
return false;
}
Очевидно, что есть несколько способов сделать это, и вы можете добавить больше условий для true против false (я бы удостоверился, что все варианты «TRUE» и «FALSE», такие как «True», плюс «T» и "F" работает правильно). Вы даже можете расширить его до числового анализа.