2013-09-30 4 views
2

템플릿 매개 변수에 스마트 포인터 :C++ 내가 템플릿 매개 변수로이 쓰기 위해 노력하고 있어요

template <class T> 
struct FooStruct { 

    template <void F(std::unique_ptr<T> Object)> 
    void FooMethod() 
    { 
     //.... 
    } 

}; 

그런 다음 오류가 온다 최대 :이 방법은 잘 작동

error C2993: 'std::unique_ptr<T>' : illegal type for non-type template parameter 'Object' 

:

template <class T> 
struct FooStruct { 

    template <class UT,void F(UT Object)> 
    void FooMethod() 
    { 
     //.... 
    } 

}; 

UT 매개 변수의 std::unique_ptr<Person>FooMethod()에 전달하면 것은 잘 작동합니다.

스마트 포인터를 템플릿 매개 변수로 전달하는 특별한 방법이 있습니까?

Object 문제를 일으키는,이 작업을 듯 파악
+0

당신이'을 포함나요 :

다음
template <void(std::unique_ptr<T>)> 

난 그냥과 같이 함수에 식별을 추가했다 'FooStruct'의 정의 이전에? – dyp

+0

나는 대답은 'template )>'라고합시다. [temp.param]/8에 따라'template )>'로 쇠퇴하고 * 함수에 대한 * 포인터는 비 형식 템플릿 매개 변수의 유형으로 허용됩니다 [temp.param]/4. 컴파일러 버그가 생겼을 수도 있습니다. – dyp

답변

1

:

template <void(*F)(std::unique_ptr<T>)> 
+0

AFAIK'Object'는 허용되어야합니다. 여기서는 아무 쓸모가 없습니다. – dyp

관련 문제