gpt4 book ai didi

c++ - 模板函数的模板参数

转载 作者:可可西里 更新时间:2023-11-01 16:37:07 25 4
gpt4 key购买 nike

我刚刚发布了一个 skiplist 容器库。 Sun 编译器对此提示:

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())));
}

错误是:

"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 没有默认值。尽管我看过的所有地方,他们都只使用这个:

typedef std::reverse_iterator<iterator> reverse_iterator;

这是编译器提示的第 65 行。我需要添加 T 作为参数吗?我无法找出有问题的错误。

顺便说一句,这适用于我能找到的所有平台上的 gcc。它也适用于 Borland。

最佳答案

Comparing C++ Standard Libraries libCstd and libstlport 所述, Sun C++ 编译器附带了“C++ 标准库”的两个实现:libCstd 和 libSTLport。不幸的是,libCstd 不符合标准,但出于向后兼容的原因,它是默认设置。除其他差异外,libCstd 版本的 std::reverse_iterator 模板使用多个模板参数。

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

另见:

关于c++ - 模板函数的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4481379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com