diff --git a/modules/11_cpp17/src/variant.cpp b/modules/11_cpp17/src/variant.cpp index a926a71..48c4217 100644 --- a/modules/11_cpp17/src/variant.cpp +++ b/modules/11_cpp17/src/variant.cpp @@ -3,18 +3,32 @@ namespace cpp17 { auto variant_to_string(const Value& value) -> std::string { - (void)value; + if (std::holds_alternative(value)) { + return "int:" + std::to_string(std::get(value)); + } + if (std::holds_alternative(value)) { + return "double:" + std::to_string(std::get(value)); + } + if (std::holds_alternative(value)) { + return "string:" +std::get(value); + } return {}; } auto sum_numeric_variants(const std::vector& values) -> double { - (void)values; - return 0.0; + auto sum = 0.0; + for (const auto& value : values) { + if (std::holds_alternative(value)) { + sum += static_cast(std::get(value)); + } else if (std::holds_alternative(value)) { + sum += std::get(value); + } + } + return sum; } auto is_string(const Value& value) -> bool { - (void)value; - return false; + return std::holds_alternative(value); } } // namespace cpp17