Я хотел бы, чтобы мой templated производный класс der наследовал от foo. Это всего лишь тестовый код, и я хотел посмотреть, применяю ли я правильный подход. Сам класс der является шаблоном, и я хочу, чтобы передать типы шаблонов его базового класса foo в список инициализации der class. Я использую следующий код
template<typename t , typename u>
struct foo
{
void foo_method(t inp , u out)
{
std::cout << inp + out << "\n";
}
};
template <typename m>
struct der : public foo<t,u> //Error t was not declared in the correct scope
{
der():foo<t,u>(int,int)//I want to specify the types for the base class in initialization list
{
}
};
int main()
{
der<std::string> d;
}
Теперь, когда я пытаюсь запустить приведенный выше код, я получаю
Error t was not declared in the correct scope
Любые предложения о том, как я могу это исправить?
Я думаю, что это то, что вы ищете:
template <typename m>
struct der : public foo<int,int>
{
der():foo<int,int>()
{
}
};
Делает ли это то, что вы хотите? Я не могу сказать, о чем вы просите в своем вопросе.
Воспроизводится по адресу http://ideone.com/dBCkQb
#include <iostream>
using namespace std;
template<typename t, typename u>
struct foo{
foo(t a, u b) : x(a),y(b)
{
}
t x;
u y;
};
template <typename m, typename t, typename u>
struct der : public foo<t,u>{
der(m a, t b, u c) :foo<t,u>(b,c), z(a)
{
}
m z;
};
int main() {
der<int,double,float> myder(1,1.03,2.05);
cout << myder.x << endl << myder.y << endl << myder.z << endl;
return 0;
}
foo<>
вы хотите наследовать, если вы не предоставляете аргументы шаблона?foo
не имеет конструктора с двумя аргументами, так что вы пытаетесь передать ему? И чтоt
иu
должны быть?