C++ 'std::stod':2 个重载都不能转换所有参数类型

C++ 'std::stod': none of the 2 overloads could convert all the argument types

提问人:paigelarry342 提问时间:12/16/2021 更新时间:12/16/2021 访问量:405

问:

我有以下代码

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)

C++ OOP 指针 模板 标准

评论

0赞 463035818_is_not_an_ai 12/16/2021
什么?请发布一个最小的可重复示例this
0赞 PaulMcKenzie 12/16/2021
std::stod(searchValueMin);-- 模板不能以这种方式工作。你传入一个 ,整个模板代码将粘贴到模板中,无论指定在哪里。您应该专门化 的模板。您的比较对此没有影响。intintTinttypeid
0赞 paigelarry342 12/16/2021
@PaulMcKenzie那么,我是否可以为字符串指定某个输出?
2赞 463035818_is_not_an_ai 12/16/2021
...或使用constexpr if
1赞 M.M 12/16/2021
typeid是一个运行时操作。用于编译时和类似模板if constexprstd::is_same_v

答: 暂无答案