【发布时间】:2013-04-12 21:44:41
【问题描述】:
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,因为它的顺序没有定义。可能是第一,第二,...
我认为它应该是一个模板结构,它将使用其.c_str() 方法将std::string 转换为QString。谁能帮忙写一下?
【问题讨论】:
-
令人讨厌的是 QString::arg() 对 std::string 和 std::wstring 没有重载。