2013-04-12 50 views
0
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`` arg`方法?

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

回答

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)); 
+0

但通过INT例如当它应该如何工作。它应该是模板的其他类型的工作 – Ashot

+0

@Ashot你可以重载你的模板方法用于字符串... – ForEveR