#pragma once | |
#include <stdexcept> | |
namespace pid_control | |
{ | |
struct VariantToDoubleVisitor | |
{ | |
template <typename T> | |
std::enable_if_t<std::is_arithmetic<T>::value, double> | |
operator()(const T& t) const | |
{ | |
return static_cast<double>(t); | |
} | |
template <typename T> | |
std::enable_if_t<!std::is_arithmetic<T>::value, double> | |
operator()(const T& t) const | |
{ | |
throw std::invalid_argument("Cannot translate type to double"); | |
} | |
}; | |
} // namespace pid_control |