在函数模板中推导迭代器类型?

时间:2013-06-13 12:47:18

标签: c++ c++11 iterator auto

我试图在函数中推导出迭代器的类型,该函数已经用模板推导出了参数的类型。我想要实现的是替换关键字 auto ,它在 C ++ 11 标准中具有类似的功能。最初我有以下功能:

    template<typename Type> bool activeExtension(Type &arr)
    {
        for (auto it=arr.begin(),
                  ite=arr.end();
                  it!=ite;
                      ++it)
        {
            if (*it != 0)
               return true;
        }
        return false;
    }

这适用于 C ++ 11 标准的完美编译。但事情发生了变化,我不能再使用这些功能了。

我在没有关键字自动的情况下尝试实现相同功能。所以我想到了模板。

到目前为止,我尝试的是:

    template<typename Type> bool activeExtension(Type &arr)
    {
        for (Type::iterator  it=arr.begin(),
                             ite=arr.end();
                             it!=ite;
                         ++it)
        {
            if (*it != 0)
                return true;
        }
        return false;
    }

你会如何解决这个问题?

注意: 我通常使用以下类型调用此函数,

template <class T>
struct Generic_t {
    typedef std::vector<T> Array;
};

因为我必须实例化具有不同类型的向量。

1 个答案:

答案 0 :(得分:6)

您应该使用typename Type::iterator,因为它是依赖名称。 阅读更多here

相关问题