我想知道类似的事情是否可能。基本上,我有一个模板类,它偶尔会采用模板类的对象。我想将它(或只是一个成员函数)专门用于特定的模板类,但该类的“通用”形式。
template<typename T, typename S>
class SomeRandomClass
{
//put something here
};
template<typename T>
class MyTemplateClass
{
void DoSomething(T & t) {
//...something
}
};
template<>
void MyTemplateClass< SomeRandomClass<???> >::DoSomething(SomeRandomClass<???> & t)
{
//something specialized happens here
}
用适当的类型( double 等)替换问号是可行的,但我希望它保持通用。我不知道该放什么,因为任何类型都不会被定义。我环顾四周,了解了模板模板参数,并尝试了各种组合无济于事。感谢您的帮助!
最佳答案
可以像这样专门化这个类
template <>
template <typename T,typename S>
class MyTemplateClass <SomeRandomClass<T,S> >
{
void DoSomething(SomeRandomClass<T,S>& t) { /* something */ }
};
只特化成员方法是不可能的,因为特化是对整个类的,你必须定义一个新的类。但是,您可以这样做
template <>
template <typename T,typename S>
class MyTemplateClass <SomeRandomClass<T,S> >
{
void DoSomething(SomeRandomClass<T,S>& t);
};
template <>
template <typename T,typename S>
void MyTemplateClass<SomeRandomClass<T,S> >::DoSomething(SomeRandomClass<T,S>& t)
{
// something
}
将声明和定义分开。
关于c++ - 模板参数是模板的模板类特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189945/