我正在试验std :: remove_reference。例如,我可以提取元素类型的数组,但是如何获取remove_reference以使用STL容器?例如,我要一个迭代器重新使用remove_reference下面的一个向量的元素:使用std :: remove_reference获取STL容器的元素迭代器
#include <iostream>
#include <vector>
#include <type_traits>
using std::vector;
using std::cout;
using std::endl;
using std::begin;
using std::end;
using std::remove_reference;
template<typename T>
auto my_end(T& c) -> typename remove_reference<decltype(&c[0])>::type
{
return end(c)-1; //compile error when myend<vector> is instantiated
}
int main()
{
int ia[] = {1,2,3,4,5,6,7,8,10};
vector<int> v(begin(ia), end(ia));
auto my_back1 = *my_end(ia);
cout << my_back1 << endl; //prints 10
auto my_back2 = *my_end(v);
cout << my_back2 << endl; //should print 10
}
时my_end<vector>
被实例化编译器错误是:
cannot convert from 'std::_Vector_iterator<_Myvec>' to 'int *'
'decltype(C [0])'看起来不正确 –
为什么不只是'typename的T :: iterator'?或者'decltype(c.begin())',如果你真的必须的话。 –
@KerrekSB或'decltype(end(c)-1)'如果他真的必须。 – pmr