C++ 嵌套类模板问题

C++ 嵌套类模板问题,c++,templates,C++,Templates,找不到此问题的适当名称 我有一个模板类数组,它包含一个嵌套的迭代器类 class Array<T>::Iterator 类数组::迭代器 我想定义一个函数“sort”: 模板 无效排序(RAIterator开始、RAIterator结束); 问题是,g++不能从函数的签名推断出T。因为我希望函数独立于指定T(例如sort(…),所以我考虑了以下语法(显然是错误的): 模板 无效排序(RAIterator开始、RAIterator结束); 有没有办法让编译器计算出T?您应该在迭

找不到此问题的适当名称

我有一个模板类数组,它包含一个嵌套的迭代器类

class Array<T>::Iterator
类数组::迭代器 我想定义一个函数“sort”:

模板
无效排序(RAIterator开始、RAIterator结束);
问题是,g++不能从函数的签名推断出T。因为我希望函数独立于指定T(例如sort(…),所以我考虑了以下语法(显然是错误的):

模板
无效排序(RAIterator开始、RAIterator结束);

有没有办法让编译器计算出T?

您应该在迭代器类中定义T的typedef,然后可以在排序函数中访问它:

template <typename T>
class Array{
    class Iterator{
        typedef T value;
    }
}

template <class RAIterator>
void sort(RAIterator start, RAIterator end){

    typename RAIterator::value &v=...;   
}
模板
类数组{
类迭代器{
T值;
}
}
模板
无效排序(RAIterator开始、RAIterator结束){
typename-RAIterator::value&v=。。。;
}

您应该在迭代器类中设置T的typedef,然后可以在排序函数中访问它:

template <typename T>
class Array{
    class Iterator{
        typedef T value;
    }
}

template <class RAIterator>
void sort(RAIterator start, RAIterator end){

    typename RAIterator::value &v=...;   
}
模板
类数组{
类迭代器{
T值;
}
}
模板
无效排序(RAIterator开始、RAIterator结束){
typename-RAIterator::value&v=。。。;
}

为什么
排序
需要知道
T
?才能创建堆(用于堆排序)。为什么
排序
需要知道
T
?才能创建堆(用于堆排序)。您应该从
sort
的模板参数列表中删除
T
。它不应该像在STL迭代器中一样在迭代器中定义吗?@The-Q这是另一种方法。我觉得这个更自然。但实际上,在这种情况下,两者都可以。我在哪里可以找到定义符合STL的容器/迭代器的参考?强调遵从性,而不仅仅是STL行为。我只能找到像指南一样的小文章,没有参考。你应该从
sort
的模板参数列表中删除
T
。它不应该像在STL迭代器中一样在迭代器中定义吗?@The-Q这是另一种方法。我觉得这个更自然。但实际上,在这种情况下,两者都可以。我在哪里可以找到定义符合STL的容器/迭代器的参考?强调遵从性,而不仅仅是STL行为。我只能找到一些类似指南的小文章,没有参考资料。
template <typename T>
class Array{
    class Iterator{
        typedef T value;
    }
}

template <class RAIterator>
void sort(RAIterator start, RAIterator end){

    typename RAIterator::value &v=...;   
}