Использовать шаблон специализации:
template <typename T>
void Convert(const std::string& source, T& target)
{
target = boost::lexical_cast<T>(source);
}
template <>
void Convert(const std::string& source, int8_t& target)
{
int value = boost::lexical_cast<int>(source);
if(value < std::numeric_limits<int8_t>::min() || value > std::numeric_limits<int8_t>::max())
{
//handle error
}
else
{
target = (int8_t)value;
}
}