Back
Close

Modern C++ idoms and recipes

meshell
10K views

std::variant

In the previous exercise we used std::optional to indicate failure. But how about a more detailed error message?

Enter template class std::variant. We could use std::variant to either hold a valid value or a detailed error.

DIY

Refactor function differentiate to have return type std::variant<double, std::string> and once again make the tests pass. The variant should either be a valid value or an error string.

Refactor the code to use std::variant
#include <functional>
#include <sstream>
#include <string>
// symmetric difference quotient
double differentiate(std::function<double(double)> f, double h, double x)
{
return (f(x + h) - f(x - h)) / (2 * h);
}
std::string estimated_velocity(std::function<double(double)> distance, double time, double precision)
{
auto velocity = differentiate(distance, precision, time);
std::stringstream output;
output << "Estimated velocity after " << time << " seconds is " << velocity << " m/s.";
return output.str();
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants