2013-07-06 2 views
1

나는 함수 포인터를 원하는 코드를 가지고 있지만, 에서 "new T (x, y, z)"라고하는 코드를 호출해야합니다.새로운 T (x, y, z) 함수로

나는의 라인을 따라 함수 작성할 수 있습니다

template<T, X, Y, Z> 
T* Construct(X x, Y y, Z z) { 
    return new T(x, y, z); 
} 

을하지만 난 궁금 그런 일이 STL에 이미 존재하는 경우, 내가 인수의 변수 번호를이 작업을 수행 할 필요가 있기 때문에 이것은 위의 반복이 필요합니다 , 말하자면, 각 인수의 수에 대해 한 번씩 10 번, 헤더 파일에 너무 많은 상용구를 추가하는 것을 피하고 싶습니다.

C++ 11에서

답변

3

사용할 수있는 가변 인자 템플릿 :. 당신이 아니라면 또한

template<typename T, typename... Args> 
T* Construct(Args&&... args) 
{ 
    return new T(std::forward<Args>(args)...); 
} 

, 당신이 정말로 예를 들어 (원시 포인터가 아닌 스마트 포인터를 반환 할 여부를 unique_ptr을 고려 . 원시 포인터를 소유하여, 낮은 수준의 물건을이 나는이 표준 할당이 무엇이라고 생각 현대 C++에서

+0

을 그리고,'표준 :으로 make_ <고유 반환/샤르 ed> (std :: forward (args) ...); ' – chris

+0

감사합니다, 그런 종류의 작품이긴하지만, 내가 예상했던대로는 아닙니다. 이 정확한 함수가 STL에 이미 존재한다면 나는 여전히 궁금하다. 왜 당신의 솔루션이 나를 위해 잘 작동하지 않는가하는 이유는 (아직) 코드베이스에서 가변적 인 템플릿을 사용할 수 없다는 것입니다. 이 함수가 이미 STL에 있으면 사용할 수 있습니다. – user2557021

+0

@ user2557021 : 그런 다음 Kerrek의 솔루션을 고려해야 할 것입니다. –

3

을 권장하지 않습니다 : 물론,

#include <memory> 

std::allocator<T> alloc; 

T * p = alloc.allocate(1); 
alloc.construct(p, x, y, z); 
+0

고마워요. Andy의 솔루션에 대한 제 의견을 참조하십시오. 이 작업을 제외하면 작동하지 않는 함수가 있어야하며 반드시 가변적 인 템플릿이어야합니다. STL의 함수 또는 메서드로 이미 존재하는 함수 만 사용할 수 있습니다. 하나도없는 것 같습니다. – user2557021

관련 문제