Шаблонная структура, наследуемая от другой Шаблонной структуры

0

Я хотел бы, чтобы мой 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

Любые предложения о том, как я могу это исправить?

  • 0
    Как компилятор должен знать, что foo<> вы хотите наследовать, если вы не предоставляете аргументы шаблона?
  • 0
    Ваш вопрос не имеет большого смысла. foo не имеет конструктора с двумя аргументами, так что вы пытаетесь передать ему? И что t и u должны быть?
Теги:
templates
c++03

2 ответа

3
Лучший ответ

Я думаю, что это то, что вы ищете:

template <typename m>
struct der : public foo<int,int>
{
  der():foo<int,int>()
  {

  }
};
  • 0
    Конечно, сгенерированная компилятором версия уже вызывает базовый класс default-ctor.
  • 0
    тогда нам не нужно foo <int, int> (). Я хотел знать, возможно ли указать их в списке инициализации. Мне любопытно
Показать ещё 3 комментария
1

Делает ли это то, что вы хотите? Я не могу сказать, о чем вы просите в своем вопросе.

Воспроизводится по адресу 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню