Пожалуйста, рассмотрите следующий пример:
class Generator {
public:
Generator(int n)
: m_n(n)
{
}
int f()
{
return m_n;
}
private:
int m_n;
};
template<class BaseClass>
class Transformer : public BaseClass
{
public:
Transformer(int mult, int add)
: m_mult(mult)
, m_add(add)
{
}
int f()
{
return BaseClass::f() * m_mult + m_add;
}
private:
int m_add;
int m_mult;
};
Воображение: существует больше классов Generator
, которые имеют разные аргументы в своих конструкторах.Теперь я хочу создать экземпляр класса, состоящий из обоих передавая все необходимые параметры.Поэтому я попробовал следующее, но Generator
явно не распознается как базовый класс:
class TG : public Transformer<Generator>
{
public:
TG(int n, int mult, int add)
: Generator(n) // error C2614: 'TG': illegal member initialization: 'Generator' is not a base or member
, Transformer(mult, add)
{}
};
TG t(n,mult,add);
Затем я попробовал специализацию шаблона:
template<> Transformer<Generator>::Transformer(int n, int mult, int add) // error C2244: 'Transformer<Generator>::Transformer': unable to match function definition to an existing declaration
: Transformer(mult,add)
, Generator(n)
{};
Transformer<Generator> t(n,mult,add);
Как создать экземпляр шаблона,у которого есть конструкторы не по умолчанию?