【发布时间】:2017-04-10 01:35:41
【问题描述】:
最近一直在学习动态内存分配。
出于实践目的,我尝试制作一个通用函数,它可以接受迭代器作为参数,然后从头到尾复制到动态分配的数组,然后返回一个指针。
我想用完全推导来做函数,例如调用函数时不指定返回类型。
如果可能的话,我还希望函数声明尽可能简单,不要使用任何库(std::remove_reference 和 type_traits 除外)。
以下代码无法编译。而且我知道从逻辑角度来看代码是无用的。我只是想向你展示我的意图和我想要实现的目标......
#include <iostream>
#include <vector>
#include <type_traits>
template<typename T>
auto* returnPointer(T iter1, T iter2) -> std::remove_reference<decltype(*iter1)>::type
{
auto p = new std::remove_reference<decltype(*iter1)>::type [10];
auto p_help = p;
while(iter1 != iter2)
{
*p_help = *iter1;
p_help++;
iter1++;
}
return p;
}
int main ()
{
std::vector<int> v {0,1,2,3,4,5,6,7,8,9};
int *p = returnPointer(v.begin(), v.end());
for(int i = 0; i < 10; i++)
std::cout << p[i] << " ";
return 0;
}
我明白为什么它不能编译,我不知道如何让它按照我想象的方式工作......
非常感谢任何帮助! :)
【问题讨论】:
标签: c++ templates pointers iterator dynamic-allocation