我在下面有一个简单的示例,其中AddField()是成员模板。

要使AddField(T)与用户定义的类型或诸如vector之类的类型一起工作,我需要做什么。它适用于原始类型。

class Data
{
public:
    template <typename T>
    void AddField(T val)
    {
        std::stringstream s;
        s << val;
        m_data += s.str();
    }

private:
    std::string m_data;
};

class A
{
public:
    A(int val) : m_k(val) {}
private:
    int m_k;
};


int main() {
    Data x;
    // Add basic types
    x.AddField(1);
    x.AddField("_");
    x.AddField(0.5);

    **// Add a vector**
    std::vector<int> v;
    v.push_back(99);
    x.AddField(v);    <==== Not OK

   **// Add a user defined type**
    A a(-45);
    x.AddField(a);    <==== Not OK

    return 0;
}


谢谢!

最佳答案

您可以为向量定义operator<<()(例如

template <typename T>
std::ostream & operator<< (std::ostream& s, std::vector<T> const & v)
 { for ( auto const & e : v ) s << e; return s; }


)和A(例如,如果您在A中添加get_m_k()方法,

std::ostream & operator<< (std::ostream& s, A const & a)
 { return s << a.get_m_k(); }

关于c++ - 用户定义类型的成员模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43699396/

10-11 16:24