1

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

    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标准的完美编译。但是事情发生了变化,我不能再使用这些功能了。

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

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

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

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

4

1 回答 1

6

您应该使用typename Type::iterator它,因为它是从属名称。在这里阅读更多

于 2013-06-13T12:48:12.850 回答