Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从迭代器获取迭代器底层类型?_C++_C++11_Templates_Iterator_Decltype - Fatal编程技术网

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在表达式上工作。:)