То, как это написано в среде без CLI, будет означать что-то вроде
template <typename T>
T GetValue (const std::string& value) const
{
T t;
try
{
t = boost::lexical_cast<T>(value);
}
catch (const boost::bad_lexical_cast&) {
// It's horrible!
// (...)
}
return t;
}
Обратите внимание, что это преобразование является эффективным, поскольку выполняется только соответствующее преобразование. В вашем случае преобразование в int
будет означать обращение к преобразованию в удвоение (что может, и я подозреваю, менее эффективно, чем простое преобразование в int) и злое округление вашим static_cast
.
Почему вообще склонны это делать?
Попробуйте использовать тот же подход, который я использовал в моем примере, но перенесли на CLI. Специализируйте ваши шаблоны для вызовов MyConvert<int>
, MyConvert<double>
или даже создайте два отдельных метода (потому что написание функции шаблона только с двумя подходящими параметрами шаблона не лучший способ разработки вашего приложения).
Каждый из этих методов / специализаций шаблона будет означать вызов соответствующей подпрограммы ToYyy
и возврат результата соответствующего типа.