C++ 如何将'std::string'传递给'QString``arg`方法? 类StringResourceTable { 私人: StringResourceTable(); 公众: 静态StringResourceTable&实例(); 无效配置(常量QString和路径); QString消息(常量QString&id)常量; 模板 QString消息(常量QString&id,T1 a1)常量 { 返回消息(id).arg(a1); } 模板 QString消息(常量QString&id、T1 a1、T2 a2)常量 { 返回消息(id).arg(a1).arg(a2); } 模板 QString消息(常量QString&id、T1 a1、T2 a2、T3 a3)常量 { 返回消息(id).arg(a1).arg(a2).arg(a3); } 私人: QString m_路径; QMap m_图; }
如果C++ 如何将'std::string'传递给'QString``arg`方法? 类StringResourceTable { 私人: StringResourceTable(); 公众: 静态StringResourceTable&实例(); 无效配置(常量QString和路径); QString消息(常量QString&id)常量; 模板 QString消息(常量QString&id,T1 a1)常量 { 返回消息(id).arg(a1); } 模板 QString消息(常量QString&id、T1 a1、T2 a2)常量 { 返回消息(id).arg(a1).arg(a2); } 模板 QString消息(常量QString&id、T1 a1、T2 a2、T3 a3)常量 { 返回消息(id).arg(a1).arg(a2).arg(a3); } 私人: QString m_路径; QMap m_图; },c++,qt,templates,C++,Qt,Templates,如果QString类替换%1,%2,,则此代码使用arg方法。。。通过一些参数。参数可以是int、char*、double和QString支持的任何参数,但不能是std::string。将std::string传递给任何message函数都非常方便。我不能将它们专门化为std::string,因为它的顺序没有定义。它可能是第一、第二 我认为它应该是一个模板结构,它将使用.c_str()方法将std::string转换为QString。谁能帮忙写呢?功能如何 但是,您可以使用 class Stri
QString
类替换%1
,%2
,,则此代码使用arg
方法。。。通过一些参数。参数可以是int、char*、double和QString
支持的任何参数,但不能是std::string
。将std::string
传递给任何message
函数都非常方便。我不能将它们专门化为std::string
,因为它的顺序没有定义。它可能是第一、第二
我认为它应该是一个模板结构,它将使用.c_str()
方法将std::string
转换为QString
。谁能帮忙写呢?功能如何
但是,您可以使用
class StringResourceTable
{
private:
StringResourceTable();
public:
static StringResourceTable& instance();
void configure(const QString& path);
QString message(const QString& id) const;
template <typename T1>
QString message(const QString& id, T1 a1) const
{
return message(id).arg(a1);
}
template <typename T1, typename T2>
QString message(const QString& id, T1 a1, T2 a2) const
{
return message(id).arg(a1).arg(a2);
}
template <typename T1, typename T2, typename T3>
QString message(const QString& id, T1 a1, T2 a2, T3 a3) const
{
return message(id).arg(a1).arg(a2).arg(a3);
}
private:
QString m_path;
QMap<QString, QString> m_map;
}
但它在传递int时应该如何工作。对于其他类型来说,它应该是一个模板,因为QString::arg()对于std::string和std::wstring没有重载,这很烦人。
template<typename T>
const T& convert(const T& v)
{
return v;
}
QString convert(const std::string& s)
{
return QString::fromStdString(s);
}
return message(id).arg(convert(a1));