【问题标题】:Deduce iterator type in function template?在函数模板中推断迭代器类型?
【发布时间】:2013-06-13 12:47:17
【问题描述】:

我试图在一个函数中推断出迭代器的类型,该函数已经使用模板推断出参数的类型。我想要实现的是替换 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;
};

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多