相关疑难解决方法(0)

Pretty-print C++ STL containers

Please take note of the updates at the end of this post.

Update: I have created a public project on GitHub for this library!


I would like to have a single template that once and for all takes care of pretty-printing all STL containers via operator<<. In pseudo code, I'm looking for something like this:

template<container C, class T, String delim = ", ", String open = "[", String close = "]">
std::ostream & operator<<(std::ostream & o, const C<T> …
Run Code Online (Sandbox Code Playgroud)

c++ templates operator-overloading pretty-print c++11

379
推荐指数
5
解决办法
4万
查看次数

部分类模板专业化与地图

我是一名新的C++程序员,不久前我学习了Java和ANSI C,并决定试一试.

好吧,我喜欢C++,但我不喜欢迭代器的工作方式:

在java中,你可以将整个容器设为私有,并为它的迭代器实现一个getter函数,迭代器有一个方法hasNext(),它返回一个布尔值,具体取决于它是否已到达容器的末尾.

我发现在C++上做类似事情的唯一方法就是编写2个getter,iteratorBegin()然后iteratorEnd()返回一个对应于第一个和最后一个位置的interator,递增返回的迭代器iteratorBegin()并将其与之比较iteratorEnd(),允许我迭代容器直到最后一个已经达到了位置

但是,我想只使用一个getter方法,我想:"让我自己创建迭代器类"

到目前为止一切顺利,我已成功完成了套装和列表,但我似乎无法用地图制作它,这里的代码令我不安:(该类是在一个单独的.h中定义的,这称为customIterator的.cpp)

template<typename T, typename D>
const D& custIterator<T,D>::next()
{
    const D& obj = (*it);
    if(hasNext())
    {
        it++;
    }
    return obj;
}

//the above works fine

template<typename T, typename D>
const D& custIterator<map<T,D>,D>::next() //error in this line
{
    D& obj = (*it).second; 
    if(hasNext())
    {
        it++;
    }
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

在编译专用方法时,它说:错误:即使我#include <map>在文件顶部添加了'map'也未在此范围内声明

我正在使用带有代码块的gcc版本4.4.5(Debian 4.4.5-8)

拜托,我需要一些帮助.

感谢您的关注!

c++ templates iterator map partial-specialization

1
推荐指数
1
解决办法
521
查看次数