c++ - 模板参数是模板的模板类特化

标签 c++ templates

我想知道类似的事情是否可能。基本上,我有一个模板类,它偶尔会采用模板类的对象。我想将它(或只是一个成员函数)专门用于特定的模板类,但该类的“通用”形式。

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/

相关文章:

c++ - 模板转发对成员方法的调用

c++ - 使用上一次调用的结果递归调用每个元组成员

c++ - 在模板化函数中将 std::vector 设置为本地会导致编译失败

c++ - 关于 'C++ Coding Standards' 书中的最佳实践和宏的问题

c++ - 在类中创建新线程(windows)

具有STL容器的c++函数模板特化

c++ - 模板可以扩展 C++ 函数中的类吗?

c++ - 从 DLL 导出 STL std::basic_string 模板时,出现 LNK2005 错误

c++ - 在运行时创建测试(谷歌测试)

c++ - 为什么 union 不能用于继承?