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

时间:2014-12-17 03:53:42

标签: c++ templates

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

template <class Type>
class Null;

template <>
class Null<std::string> {
  public:
    Null() {}
    operator std::string() const {
        return std::string();
    }
};

到目前为止适用于字符串

但我想写类似

的内容
template<> class Null<boost::shared_ptr<T>>
{
public:
    NUll(){}
    operator boost::shared_ptr<T>() const
    {
        return boost::shared_ptr<T>();
    }
};

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

1 个答案:

答案 0 :(得分:6)

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

template <typename T>
class Null<boost::shared_ptr<T>>
{
    // ...
};

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

template <typename> class function; // primary template
template <typename RC, typename... Args>
class function<RC(Args...)> {
    // definition
};

std::function<...>的情况下,主要内容甚至从未被定义过!