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