带模板化参数的C++模板特化

Mic*_*ael 0 c++ templates

我尝试编写一个名为Null的模板化类,如下所示;

template <class Type>
class Null;

template <>
class Null<std::string> {
  public:
    Null() {}
    operator std::string() const {
        return std::string();
    }
};
Run Code Online (Sandbox Code Playgroud)

到目前为止适用于字符串

但我想写点类似的东西

template<> class Null<boost::shared_ptr<T>>
{
public:
    NUll(){}
    operator boost::shared_ptr<T>() const
    {
        return boost::shared_ptr<T>();
    }
};
Run Code Online (Sandbox Code Playgroud)

但它不会编译,我测试了其他方法,无法解决.我怎么能这样做?

Die*_*ühl 6

当您的专业化需要模板参数(或参数)时,您最好提及它们:

template <typename T>
class Null<boost::shared_ptr<T>>
{
    // ...
};
Run Code Online (Sandbox Code Playgroud)

请注意,主类型和专业化中的模板参数列表没有任何关系!特别是,您可以为专门化提供许多模板参数.典型的例子是std::function<...>:

template <typename> class function; // primary template
template <typename RC, typename... Args>
class function<RC(Args...)> {
    // definition
};
Run Code Online (Sandbox Code Playgroud)

std::function<...>初级甚至从未定义的情况下!