I need to read csv file using already written library that returns column value always as string, so as part of validation and further processing i need to convert that string value to appropriate type (which can be double, int, enum, bool, date etc.) and here is what I had written but this is giving error that there are multiple overloads for stod/stoi etc. Also is there any better approach to accomplish this task.
bool convertFunction(T a, R& b,std::function<R (T)> fx)
{
bool isConverted = true;
try
{
b = fx(a);
}
catch(const std::exception& e)
{
isConverted = false;
}
return isConverted;
}
int main() {
std::string x = "2.54";
double y = 0.0;
bool isValid = convertFunction(x,y,std::stod);
std::cout<<"value of y is "<<y<<std::endl;
return 0;
}
stoddirectly?std::stodis an overloaded set of functions and the compiler has no idea which one you mean. Besides, taking an address of a standard library function (with a few exceptions) is UB. You can wrapstodwith your own function and pass that. Tangentially,std::functionmight not be the best idea, you may want to consider another template parameter instead.R(*fx)(T)