2
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;
}

这段代码使用argif QStringclass 的方法来替换%1, %2, ... 的一些参数。参数可以是 int、char*、double 和任何QString支持的,但不是std::string. std::string传递给任何message函数都会非常方便。我不能专门化它们,std::string因为它的顺序没有定义。可能是第一,第二,...

我认为它应该是一个模板结构,它将转换std::stringQString使用它的.c_str()方法。谁能帮忙写一下?

4

1 回答 1

3

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));
于 2013-04-12T13:22:27.010 回答