Следующие многоуровневые шаблоны классов не компилируются:
#include <iostream>
using namespace std;
template<typename T>
class A {
private:
A(void);
T _num_;
public:
A(T num): _num_(num){};
void printNum(void){
cout << _num_ << "\n";
}
};
template<typename T>
class B : public A<T> {
private:
B(void);
public:
B(T num): A(num){};
};
class C : public B<int> {
private:
C(void);
public:
C(int num): B(num){};
};
int main()
{
/* code */
auto c = C(2);
c.printNum();
return 0;
}
ошибка: инициализатор члена 'A' не называет элемент не статических данных или базовый класс B (T num): A (num) {};
ошибка: инициализатор элемента 'B' не называет элемент нестатических данных или базовый класс C (int num): B (num) {};
Однако удаление шаблонов выполняется без проблем.
#include <iostream>
using namespace std;
class A {
private:
A(void);
int _num_;
public:
A(int num): _num_(num){};
void printNum(void){
cout << _num_ << "\n";
}
};
class B : public A {
private:
B(void);
public:
B(int num): A(num){};
};
class C : public B {
private:
C(void);
public:
C(int num): B(num){};
};
int main()
{
/* code */
auto c = C(2);
c.printNum();
return 0;
}