首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板函数的模板参数

模板函数的模板参数
EN

Stack Overflow用户
提问于 2010-12-19 10:54:08
回答 2查看 1.5K关注 0票数 9

我刚刚发布了一个skiplist容器库。Sun编译器对此进行了抱怨:

代码语言:javascript
复制
template <class T, class R>
bool operator==(const IndexedSkipList<T,R> &left, const IndexedSkipList<T,R> &right)
{
  return ((left.size() == right.size()) &&
          (std::equal(left.begin(), left.end(), right.begin())));
}

错误是:

代码语言:javascript
复制
"include/CSIndexedSkipList.h", line 65: Error: Too few arguments for template std::reverse_iterator<CS::BidiIdxIterator<CS::IndexedSkipList<CS::T, CS::R>>>.
"include/CSIndexedSkipList.h", line 207:     Where: While specializing "CS::IndexedSkipList<CS::T, CS::R>".
"include/CSIndexedSkipList.h", line 207:     Where: Specialized in non-template code.

上面的代码是从207开始的。但它似乎在抱怨reverse_iterator。我真的搞不懂。我不能直接访问Sun编译器,所以我想知道我是不是做错了什么。

此外,我在reverse_iterator中只使用了一个模板参数,但我注意到SGI文档中说第二个参数T没有默认值。

代码语言:javascript
复制
typedef std::reverse_iterator<iterator> reverse_iterator;

这就是编译器抱怨的第65行。我需要添加T作为参数吗?我找不出问题中的错误。

顺便说一句,这个在我能找到的所有平台上都能在gcc上运行。它在Borland也是有效的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-19 11:27:22

正如在Comparing C++ Standard Libraries libCstd and libstlport上所解释的,ships编译器附带了两个"C++标准库“的实现: libCstd和libstlport。不幸的是,libCstd不符合标准,但出于向后兼容性的原因,它是默认的。在其他区别中,libCstd版本的std::reverse_iterator模板使用了多个模板参数。

您需要通过传入编译器选项-library=stlport4来指示编译器使用libstlport。

另请参阅:

票数 10
EN

Stack Overflow用户

发布于 2011-11-27 05:26:23

顺便说一句,-library=stlport4不是在Solaris上运行的性能关键型多线程应用程序的选项,因为Sun Studio12.1/12.2附带的STLPort版本比libCstd慢得多,这是因为在Solaris上分配/释放时的自旋锁互斥锁太慢。在这方面,STLPort5应该更好,但我未能在Solaris上构建它。至少可以说,在Solaris上,STLPort似乎不再受到积极的支持或使用。因此,我们的所有软件,无论是在SPARC上还是在x86上,都必须完全切换到libCstd

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4481379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档