0

我正在尝试创建一个 C++-Printing-Function,它通过复制算法和用户定义的标头打印任何 STL 容器。

我的问题是,我必须通过复制算法打印它,所以我需要 ostream_iterator 的模板类型(“ostream_iterator”)?

如何获取模板后面的容器类型

(我用 typeid(cont) 试过了,但没用 - 谢谢!

 template<typename Container>
    void HeaderPrint(Container cont, std::string header = ""  )
    {
        std::cout << header << std::endl;
        copy(cont.begin(),cont.end(), ostream_iterator<typeid(cont)>(cout," "));
        std::cout << std::endl;
    }
4

2 回答 2

2

标准库容器value_type使用容器类型定义:

copy(cont.begin(),cont.end(), ostream_iterator<typename Container::value_type>(cout," "));

如果您使用自己的容器类,那么使用此约定也是明智的:

template <typename T>
class MyContainer
{
 public:
  typedef T value_type;
 ....
};
于 2013-06-07T20:40:37.860 回答
0

juanchopanza回答了关于容器的 typedef,但还有另一种方法。

所有标准容器都有begin()方法。要获取它的类型,请使用decltype. 所以,你的方法是:

template<typename Container>
void HeaderPrint(Container cont, std::string header = ""  )
{
    std::cout << header << std::endl;
    copy(cont.begin(),cont.end(), ostream_iterator<decl_type(*cont.begin())>(cout," "));
    std::cout << std::endl;
}

我仍然觉得juanchopanza 说的更好。

于 2013-06-07T20:51:02.150 回答