C++ 如何将'std::string'传递给'QString``arg`方法? 类StringResourceTable { 私人: StringResourceTable(); 公众: 静态StringResourceTable&实例(); 无效配置(常量QString和路径); QString消息(常量QString&id)常量; 模板 QString消息(常量QString&id,T1 a1)常量 { 返回消息(id).arg(a1); } 模板 QString消息(常量QString&id、T1 a1、T2 a2)常量 { 返回消息(id).arg(a1).arg(a2); } 模板 QString消息(常量QString&id、T1 a1、T2 a2、T3 a3)常量 { 返回消息(id).arg(a1).arg(a2).arg(a3); } 私人: QString m_路径; QMap m_图; }

C++ 如何将'std::string'传递给'QString``arg`方法? 类StringResourceTable { 私人: StringResourceTable(); 公众: 静态StringResourceTable&实例(); 无效配置(常量QString和路径); QString消息(常量QString&id)常量; 模板 QString消息(常量QString&id,T1 a1)常量 { 返回消息(id).arg(a1); } 模板 QString消息(常量QString&id、T1 a1、T2 a2)常量 { 返回消息(id).arg(a1).arg(a2); } 模板 QString消息(常量QString&id、T1 a1、T2 a2、T3 a3)常量 { 返回消息(id).arg(a1).arg(a2).arg(a3); } 私人: QString m_路径; QMap m_图; },c++,qt,templates,C++,Qt,Templates,如果QString类替换%1,%2,,则此代码使用arg方法。。。通过一些参数。参数可以是int、char*、double和QString支持的任何参数,但不能是std::string。将std::string传递给任何message函数都非常方便。我不能将它们专门化为std::string,因为它的顺序没有定义。它可能是第一、第二 我认为它应该是一个模板结构,它将使用.c_str()方法将std::string转换为QString。谁能帮忙写呢?功能如何 但是,您可以使用 class Stri

如果
QString
类替换
%1
%2
,,则此代码使用
arg
方法。。。通过一些参数。参数可以是int、char*、double和
QString
支持的任何参数,但不能是
std::string
。将
std::string
传递给任何
message
函数都非常方便。我不能将它们专门化为
std::string
,因为它的顺序没有定义。它可能是第一、第二

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

功能如何

但是,您可以使用

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

但它在传递int时应该如何工作。对于其他类型来说,它应该是一个模板,因为QString::arg()对于std::string和std::wstring没有重载,这很烦人。
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));