gpt4 book ai didi

C++ 模板函数无法将 'std:string' 转换为 'double' 作为返回

转载 作者:行者123 更新时间:2023-11-30 01:33:08 25 4
gpt4 key购买 nike

我有一个函数可以从环境变量中获取数据。当我提到数字类型时它工作正常,但是当我提到值应该是字符串类型时,它在编译时出错:

g.cc: In instantiation of ‘T result(const char *, const T&) [with T = double; std::string = std::__cxx11::basic_string<char>]’:
g.cc:65:88: required from here
g.cc:23:33: error: cannot convert ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘double’ in return
23 | return std::string(env_val);
|
#include <iostream>
#include <cstdlib>
#include <type_traits>

template <typename T>
T result(const char *key, const T &default_value) {
char *env_val = getenv(key);
if (std::is_integral<T>::value)
return atoi(env_val);
else if(std::is_floating_point<T>::value)
return atof(env_val);
else if(std::is_base_of<std::string<char>, T>::value)
return std::string(env_val);
return default_value;
}

int main() {
result<int>("test1", 12); // Ok
result<double>("test2", 12.2); // Ok
result<std::string>("test3", "test3"); // ERROR
}

我已经提到作为结果返回 T,但它显示了这个错误。

最佳答案

您需要为您的 if 语句使用 constexpr,否则编译器将尝试编译每个可能的路径。

T result(const char *key, const T &default_value ) {
char *env_val = getenv(key);
if constexpr (std::is_integral<T>::value)
return atoi(env_val);
else if constexpr (std::is_floating_point<T>::value)
return atof(env_val);
else if constexpr (std::is_base_of<std::string, T>::value)
return std::string(env_val);
return default_value;
}

关于C++ 模板函数无法将 'std:string' 转换为 'double' 作为返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59053142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com