用户定义类型的成员模板

时间:2017-04-29 18:57:50

标签: c++ c++11

我在下面有一个简单的例子,其中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;
}

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为矢量定义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(); }