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
if QString
class 的方法来替换%1
, %2
, ... 的一些参数。参数可以是 int、char*、double 和任何QString
支持的,但不是std::string
. std::string
传递给任何message
函数都会非常方便。我不能专门化它们,std::string
因为它的顺序没有定义。可能是第一,第二,...
我认为它应该是一个模板结构,它将转换std::string
为QString
使用它的.c_str()
方法。谁能帮忙写一下?