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