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;
}
此代码使用arg
方法QString
类替换%1
,%2
,...替换某些参数。参数可以是int,char *,double和QString
支持的任何参数,但不是std::string
。将std::string
传递给任何message
函数会非常方便。我不能将它们专门用于std::string
,因为它的顺序没有定义。它可能是第一,第二,......
我认为它应该是一个模板结构,它会使用std::string
方法将QString
转换为.c_str()
。谁能帮忙写出来?
答案 0 :(得分:2)
fromStdString功能怎么样?
但是,您可以使用类似
的内容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));