将vector<'T>
的模板迭代器传递给函数QString::fromStdString(const std::string&)
时出现问题。
我有我的功能,如果类型T
可以将std::string
转换为QString
或int
转换为QString
,而不是添加到我的{ {1}}单元格。
从QTableWidget
转换为:
std::string
我无法理解为什么迭代器对象的类型有error: no matching function for call to ‘QString::fromStdString(int&)’ QString text = QString::fromStdString(*it);
。我做错了什么?我可以用其他方式转换它吗?
int&
答案 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,则需要将该函数拆分为重载/特化,以保持与类型相关的代码分离。