Я пытаюсь наследовать «производный» класс от base1 или base2. Для этой цели я хочу использовать специализированную специализацию. У меня есть следующиеНаследование одного из двух базовых классов с использованием специализированной специализации и конструктора
//base1
template<typename FT>
class base1
{
public:
base1(FT m)
{}
};
//base2
template<typename FT>
class base2
{
public:
base2(FT m)
{}
};
//define template specializations
template<int sType, typename FT>
class baseT {};
//for base1
template<typename FT>
class baseT<1,FT>
{
public:
typedef base1<FT> bType;
};
//for base2
template<typename FT>
class baseT<2,FT>
{
public:
typedef base2<FT> bType;
};
//Derived class which inherits either from base1 or base2
template<int sType, typename FT>
class derived : public baseT<sType,FT>::bType
{
public:
derived(FT m)
{}
};
int main()
{
derived<1,float> a1(1);
return 0;
}
Этот код не компиляции (на платформе Linux), так как базовый класс ожидает один аргумент, но я не знаю, как передать его в конструктор, полученный, чтобы сделать эту работу. (Я не хочу использовать условный). Любые советы помогут
Я не думаю, что проблема заключается в коде, который вы опубликовали. Я только что скомпилировал, не связал, образец кода, который вы опубликовали, и все работало должным образом. –