C ++模板参数中的智能指针

时间:2013-09-30 16:33:40

标签: c++ templates metaprogramming

我正在尝试将其写为模板参数:

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(),那么一切正常。

有没有一种特殊的方法可以将智能指针作为模板参数传递?

1 个答案:

答案 0 :(得分:1)

想出Object导致问题,这似乎有效:

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

然后我只需要像这样添加一个标识函数:

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