我尝试编写一个名为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)
但它不会编译,我测试了其他方法,无法解决.我怎么能这样做?
当您的专业化需要模板参数(或参数)时,您最好提及它们:
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<...>初级甚至从未定义的情况下!