Я пытаюсь сделать что-то подобное, но я получаю сообщение об ошибке,
"Недопустимый базовый класс T".
Насколько нам известно, базовый класс будет создан с именем типа T во время компиляции, а я получу определение T во время компиляции. Я попытался заменить "Typename" на "Class", но я получаю ту же ошибку. Есть идеи ?
template <typename T>
class Base
{
private:
class A : public T{};
};
// It works when I do the following in main ...
class A{}
Base* B = new Base<A> B;
// It throws error, when I pass in int,double,float,
//makes sense,because these are basic data types ...
Base* B = new Base<int> B;
// Neil's Snippet with the error reproduced ...
#include <iostream>
using namespace std;
template <typename T>
class Base
{
public :
Base::Base(int a)
{
A a;
}
private:
class A : public T{};
};
Base <int> b;
int main(){
cout << &b << endl;
}