用于类声明的C ++模板

时间:2014-01-26 15:51:06

标签: c++ oop templates

所以,我可以做到以下几点:

template<typename T>
void printValue(T theValue)
{
     std::cout << theValue;
}

int main()
{
   /.....
   int value = 5; 
   printValue(value); 

   return 0;
}

但是如果我想为一个班级做以下事情:

template<class Type_T>
class Foo {

    public:
       template<typename Inverse>
       Foo(Inverse begin, Inverse end)
         : values(begin, end)
       {



       }

    protected:

       std::vector<Type_T> values;
};

int main() {

    std::vector<int> va = {1, 2, 3, 4, 5, 6};

    Foo<int> f(va.begin(), va.end());

    return 0;
}

我必须说明类型。有没有办法使编译器能够通过知道正在传递的迭代器的类型来决定类型?

1 个答案:

答案 0 :(得分:6)

您可以创建一个辅助函数make_foo(),该函数从给定的参数中推断出类型:

template<typename U>
Foo<typename U::value_type> make_foo(U first, U last)
{
    return { first, last };
}

auto f = make_foo(va.begin(), va.end());