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

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

此代码使用 QString 类的 arg 方法来替换 %1%2、.. .通过一些参数。参数可以是 int、char*、double 以及 QString 支持的任何内容,但不能是 std::string。将 std::string 传递给任何 message 函数会非常方便。我无法将它们专门用于 std::string 因为它的顺序未定义。它可能是第一,第二,...

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

最佳答案

怎么样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));

关于c++ - 如何将 `std::string` 传递给 `QString` `arg` 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972461/

相关文章:

c++ - 如何删除 QToolButton 上的轮廓

c++ - 具有超过 1 个类型名的模板函数

c++ - 将自定义谓词定义为 std::is_same 的组合

c++ - 使用字符串而不是类型进行模板化

c++ - 复制/修改 STL 容器的拷贝是线程安全的吗?

c++ - 不满意链接错误 : undefined symbol _ZN5boost6system16generic_categoryEv in java (JNI)

c++ - 使用静态防止函数内的多个拷贝

c++ - 如何停靠弹出窗口?

c++ - 使用QNetworkAccessManager Investing.com的网站出现问题

c++ - 在 C++11 中将 PrintContainer 预处理器定义转换为模板