如何将`std :: string`传递给`QString``arg`方法?

时间:2013-04-12 13:19:25

标签: c++ qt templates

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()。谁能帮忙写出来?

1 个答案:

答案 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));