c++ - 模板特定方法

标签 c++ templates

如果我有一个类A

template <typename T>
class A { public: void print() const; };

我可以为我所做的特定模板值编写特定版本的方法print

template<> void A<bool>::print() const { printf("A w/ type bool\n"); }
template<> void A<int>::print()  const { printf("A w/ type int\n");  }

调用 print 方法只会调用良好实现的代码(编译器告诉我是否没有特定模板的实现。


现在,如果我的类 B 的模板中有多种类型

template <typename T1, typename T2>
class B { public: void print() const; };

如果我尝试像以前一样做,比如说T2

template<typename T1> void B<T1,bool>::print() const { printf("B w/ type bool\n"); }

我收到编译器错误:

error: invalid use of incomplete type 'class B<T1,bool>'
error: declaration of 'class B<T1, bool>'

我做错了什么?

编辑

我现实生活中的 B 类包含其他我不想指定的方法(它们在一般情况下有效)

贴上部分指定的类会使这些泛型方法本身不可用

最佳答案

您不能部分特化函数/方法。

但是你可以部分特化整个类:

template <typename T1, typename T2> class B;

template<typename T1> class B<T1, bool>
{
public:
    void print() const { printf("B w/ type bool\n"); }
};

关于c++ - 模板特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408319/

相关文章:

c++ - CPack 具有自己依赖项的多个包

templates - DMD 拒绝实例化模板 : not a template declaration

c++ - 调用模板化成员的模板化方法

c++ - 在 .h 文件中定义的模板类静态成员变量应该发生什么

c++ - 是否有类型特征来计算构造函数的总数?

c++ - 错误 [outdebug 不存在] 在 Visual Studio 代码中调试基本 C++

c++ - 有没有办法用详细的缓存/CPU 效率信息来分析 MPI 程序?

c# - 模板化 Blazor 组件

c++ - 在 C++ 中打印二维字符数组

在 C++ 中具有多个枚举参数的 C++ 函数模板部分特化?