提问人:paigelarry342 提问时间:12/16/2021 更新时间:12/16/2021 访问量:405
C++ 'std::stod':2 个重载都不能转换所有参数类型
C++ 'std::stod': none of the 2 overloads could convert all the argument types
问:
我有以下代码
template <typename T>
void searchHistory( T searchValueMin, T searchValueMax){
if (typeid(T) == typeid(std::string)){ // If input search values are string
try{
double searchValueMinDouble = std::stod(searchValueMin);
double searchValueMaxDouble = std::stod(searchValueMax);
for (const auto& transaction : this->history) {
const double transactionAmount = std::stod(transaction->getValue());
if (transactionAmount >= searchValueMinDouble && transactionAmount <= searchValueMaxDouble) {
std::cout << transaction->toString() << "\n";
}
}
}
catch(std::exception&) {
std::cout << ">- Your search input seems to be invalid." << std::endl;
}
}
else{
for (const auto& transaction : this->history) {
T transactionAmount = transaction->getValue();
if (transactionAmount >= searchValueMin && transactionAmount <= searchValueMax) {
std::cout << transaction->toString() << "\n";
}
}
}
}
这是一个属于基抽象类的模板函数,它将接受数字输入、float、double、int 或字符串。但是,当我从 main 调用函数并传入字符串时,它工作正常。但是我尝试传入 2 个 int 变量,它给了我标题中显示的错误,我尝试在线搜索,人们提到了 constexpr,但这不起作用。
(this->history 只是 'Transaction' 类的一个向量。 transaction->getValue() 返回一个字符串,该字符串是一个数字,例如 1500.50)
答: 暂无答案
评论
this
std::stod(searchValueMin);
-- 模板不能以这种方式工作。你传入一个 ,整个模板代码将粘贴到模板中,无论指定在哪里。您应该专门化 的模板。您的比较对此没有影响。int
int
T
int
typeid
constexpr if
typeid
是一个运行时操作。用于编译时和类似模板if constexpr
std::is_same_v