【发布时间】:2013-06-08 00:56:01
【问题描述】:
假设我有一个包含很多函数的模板类,我想对它们进行专门化,只更改其中的一部分,而让其他的完全按照基本模板类中的规定进行。
我该怎么做?
以下是我想要实现的目标,但解决方案并不好,因为它不允许我将 int 的专业化称为 Base<int> - 我需要为此使用 IntSpec。
#include <iostream>
using namespace std;
template<typename T>
struct Base
{
void print1() {cout << "Base::print1" << endl;};
void print2() {cout << "Base::print2" << endl;};
};
struct IntSpec : public Base<int>
{
void print2() {cout << "Base<int>::print2()" << endl;};
};
int main()
{
Base<double> d;
// Base<int> i; <-- I want this kind of instantiation
IntSpec i;
d.print1();
d.print2();
i.print1();
i.print2();
}
输出是:
Base::print1
Base::print2
Base::print1
Base<int>::print2()
【问题讨论】:
标签: c++ templates inheritance c++11