我尝试编写一个名为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>();
}
};
但它不会编译,我测试了其他方法,但无法解决问题。我怎么能这样做?
答案 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<...>
的情况下,主要内容甚至从未被定义过!