최근 동적 메모리 할당을 배우고 있습니다.이터레이터 매개 변수를 사용하여 템플릿 함수에서 포인터를 반환
연습용으로 매개 변수로 반복자를 받아 들일 수있는 보편적 인 함수를 만들고 나서 처음부터 끝까지 동적으로 할당 된 배열로 복사 한 다음 포인터를 반환했습니다.
함수를 호출 할 때 반환 형식을 지정하지 않고 완전한 공제를 사용하여 함수를 만들고 싶습니다.
가능하면 라이브러리 없이도 (가능한 경우 간단하게 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;
}
...
어떤 도움을 주셔서 감사합니다. :)
나는 가까이에 있었다! 놀랄 만한! 나는 하나의 장소, 배열을 할당하고 있던 곳에서'typename'을 잊어 버렸습니다. 방금 테스트했는데 작동합니다! 감사! 'type '뒤에'*'뒤에 숨어있는 비밀이 무엇인지 설명해 주시겠습니까? – galaxyworks
@galaxyworks 그것은 간단합니다.'std :: remove_reference <...> :: type'은 요소의 타입을 반환 할 것이고,'*'를 추가하면 요소에 대한 포인터의 타입이됩니다. 당신이'std :: vector'코드를 사용하면'std :: remove_reference <...> :: type'은'int'가 될 것이고,'*'를 추가하면'int *'가됩니다. –
songyuanyao
이제 알겠습니다! 대답과 상세한 설명에 감사드립니다! – galaxyworks