2013-09-30 65 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() 
    { 
     //.... 
    } 

}; 

如果我通過std::unique_ptr<Person>,UT參數FooMethod()那麼每一個事情工作正常。

是否有一種特殊的方式將智能指針作爲模板參數傳入?

+0

是否包含' '在'FooStruct'的定義之前? – dyp

+0

我想答案是:'template )>'是合法的。它根據[temp.param]/8衰減到'template )>',並且允許*指向函數*作爲非類型模板參數的類型[temp.param/4。您可能遇到了編譯器錯誤。 – dyp

回答

1

想通了,Object是造成問題,這似乎工作:

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

於是我不得不一個標識添加到函數,像這樣:

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

AFAIK'Object'應該被允許,儘管在這裏沒用。 – dyp