C++ 如何从迭代器获取迭代器底层类型?
这是一个关于C++ 如何从迭代器获取迭代器底层类型?,c++,c++11,templates,iterator,decltype,C++,C++11,Templates,Iterator,Decltype,这是一个关于decltype的小问题。。。 我有这样的想法: using namespace std; template< typename BIt > void dostuff(BIt first, BIt middle, BIt last) { auto temp = *first; for_each(first, middle, [](decltype((temp)) el) {cout << el << " "; }); }
decltype
的小问题。。。
我有这样的想法:
using namespace std;
template< typename BIt >
void dostuff(BIt first, BIt middle, BIt last)
{
auto temp = *first;
for_each(first, middle, [](decltype((temp)) el)
{cout << el << " "; });
}
int main()
{
std::vector<int> vi{11,22,33,44,1,2,3,4,5};
dostuff(std::begin(vi), std::begin(vi) + 4, std::end(vi));
}
使用名称空间std;
模板
void dostuff(第一位、中间位、最后一位)
{
自动温度=*第一;
对于每个(第一个、中间、[](decltype((temp))el)
{cout您可能正在寻找(请注意,要详细得多)
特别是,它解析为typename std::iterator\u traits::value\u type
不过,我认为使用它没有什么好处,它更详细,而且依赖于一个额外的include,
。如果你不想要这个temp变量,你可以使用decltype(*first)
decltype(*first)
?@KerrekSB没什么……我需要睡一会儿:)顺便说一句,在堆栈跟踪我的思维过程之后……我想起了我想知道的事情……如果我能从类型而不是实例中获得一个迭代器类型的基础类型……现在我明白了这是多么愚蠢,因为decltype在表达式上工作。:)