C ++: переименование шаблонного класса

0

Я ищу какой-то код, чтобы он работал

template <typename T, int a, int b> 
class first 
{   //not so important
};

main()
{
first<double,1,2> sth;
second<double> sth2;
}

Sth2 - это тот же тип, что и sth, но имеет параметры по умолчанию (например). Я знаю, что мне нужен некоторый typedef. Я пытался

template <typename T>
struct help
{
typedef first<T,1,1> second;
};

но он работает только с дополнительными :: (help <double> :: second), и я просто хочу изменить его для второго <double>

Спасибо за любые идеи :)

  • 3
    Если вы наделены компилятором, соответствующим C ++ 11, вы можете написать template <typename T> using second = first<T, 1, 1>;
  • 0
    Да, это проблема, я совсем не благословлен C ++ 11: C
Показать ещё 1 комментарий
Теги:
templates
typedef

2 ответа

1

Вы должны просто определить

template <typename T, int a=1, int b=2> class first

а потом

first<double> sth2;

Но если вам действительно нужны два класса

template <typename T> class second : public first<T,1,1>

Должен достать тебя куда-нибудь.

  • 1
    Деривация - хорошая идея (+1), но без наследования ctor в C ++ 11 вам может потребоваться повторить first ctors за second .
1

Как насчет использования параметров по умолчанию? В противном случае igor может быть прав с С++ 11

  • 0
    Я не могу использовать C ++ 11, и у меня не может быть параметров по умолчанию, потому что позже я должен сделать третью <double> с другими параметрами по умолчанию: C и не могу изменить второй <double> на второй <double> :: тип
  • 1
    Твоя проблема кажется мне чрезмерной. Я хотел бы отказаться от требования о том, что существуют определенные классы, и настаивать на том, чтобы ему было позволено писать код так, чтобы он был читабельным, простым и в стиле версии c ++, которую я должен использовать.

Ещё вопросы

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