我正在尝试使用模板函数来打印列表中指向的对象的属性。
class SomeClass {
public:
double myVal;
int myID;
}
std::list< boost::shared_ptr< SomeClass > > myListOfPtrs;
for ( int i = 0; i < 10; i++ ) {
boost::shared_ptr< SomeClass > classPtr( new SomeClass );
myListOfPtrs.push_back( classPtr );
}
template < typename T > void printList ( const std::list< T > &listRef ) {
if ( listRef.empty() ) {
cout << "List empty.";
} else {
std::ostream_iterator< T > output( cout, " " ); // How to reference myVal near here?
std::copy( listRef.begin(), listRef.end(), output );
}
}
printList( myListOfPtrs );
打印的是指针地址。我知道我通常做的是(*itr)->myVal
,但我不清楚如何调整模板功能。
答案 0 :(得分:0)
首先,请勿在此处使用shared_ptr
。您的代码没有给我们任何使用内存管理的理由:
std::list<SomeClass> myListofPtrs;
然后,您需要为您的类提供自己的流插入运算符实现:
std::ostream& operator <<(std::ostream& os, SomeClass const& obj)
{
return os << obj.myVal;
}
如果你必须使用指针,那么你可以创建自己的循环:
for (auto a : myListOfPtrs)
{
std::cout << (*a).myVal << " ";
}