0

我正在尝试使用模板函数来打印列表中指向的对象的属性。

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,但我不清楚如何调整模板功能。

4

1 回答 1

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 << " ";
}
于 2013-07-08T23:54:36.397 回答