将模板类更改为常规类 - C++

use*_*936 3 c++ templates

我有一个模板类:

template<typename T>
class A {
public:
 virtual void func(T t);
 virtual void func2(T t);
 .
 .
 .
 virtual void funcN(T t);
}
Run Code Online (Sandbox Code Playgroud)

基本上很多类继承形式A,但T总是B或C两种类型之一.

目前,我在课堂上所做的每一项更改都会导致很长的构建.

由于T可以是B或C,我想将类转换为常规类.

任何想法如何以智能和干净的方式进行更改,而无需复制每个功能两次?

谢谢

Bar*_*nau 7

最简单的解决方案可能是使用显式特化.保留模板,但是您明确地告诉编译器要实例化哪些类.

更改您的头文件class A包含仅包含类及其成员的声明(就像您对常规类所做的那样).然后创建一个文件A.cpp,其中包含成员函数A和显式特化的实现,如下所示

#include <A.h>
#include <B.h>
#include <C.h>

//... Implementation of A

template class A<B>; // explicit instantiation for B
template class A<C>; // and for C
Run Code Online (Sandbox Code Playgroud)

并将此文件添加到您的项目中.