带有QString的模板迭代器

时间:2018-02-09 17:17:40

标签: c++ qt templates iterator qstring

vector<'T>的模板迭代器传递给函数QString::fromStdString(const std::string&)时出现问题。

我有我的功能,如果类型T可以将std::string转换为QStringint转换为QString,而不是添加到我的{ {1}}单元格。

QTableWidget转换为:

会发生问题
std::string

我无法理解为什么迭代器对象的类型有error: no matching function for call to ‘QString::fromStdString(int&)’ QString text = QString::fromStdString(*it); 。我做错了什么?我可以用其他方式转换它吗?

int&

1 个答案:

答案 0 :(得分:0)

这里的问题是if语句不会停止编译代码。当你这样做

if (typeid(*list) == typeid(vector<string>)){
    //QString text = QString::fromUtf8(static_cast<string>(it)->c_str());
    QString text = QString::fromStdString(*it);
} else if (typeid(*list) == typeid(vector<int>)){
    QString text = QString::number(*it);
}

无论QString text = QString::fromStdString(*it);list还是vector<string>,都会汇编vector<int>行。因为当您使用int&调用它时,它会尝试使用if constexpr (typeid(*list) == typeid(vector<string>)){ //QString text = QString::fromUtf8(static_cast<string>(it)->c_str()); QString text = QString::fromStdString(*it); } else if constexpr (typeid(*list) == typeid(vector<int>)){ QString text = QString::number(*it); } 编译该代码,然后您就会收到错误。

如果你有C ++ 17,你可以使用if constexpr之类的

SQLAlchemy

现在代码只有在条件为真时才会编译。

如果您无法访问C ++ 17,则需要将该函数拆分为重载/特化,以保持与类型相关的代码分离。