типинезависимый объект класса шаблона

0

Я снова застрял...

У меня есть этот класс шаблона:

template <typename a,typename b,typename c>
class myclass
{...};

Я хотел бы объявить объект этого класса:

myclass<a,b,c> x;

Это, очевидно, не работает, и я, похоже, не в состоянии решить, как объявить этот объект, или если это возможно.

Я могу сделать такой объект:

myclass<int,double,int> x;

Но я не хочу указывать типы a, b, c.

Теги:
templates
type-deduction

3 ответа

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

Вы должны объявить его в функции или классе шаблона, если я правильно вас понимаю.

template <typename a,typename b,typename c>
void F(){
   myclass<a,b,c> x;
   ...
}

В противном случае это запрещено C++ и логикой.

  • 0
    @ kim123 круто! Спасибо!
  • 0
    Вы можете принять ответ, если это то, что вам нужно.
1

Типичным способом создания сложных экземпляров шаблонов без написания аргументов является создание шаблона функции вывода типа:

template <typename A, typename B, typename C>
myclass<A, B, C> make_myclass(A a, B b, C C)
{
    return myclass<A, B, C>();   // or whatever
}

Применение:

auto x = make_myclass(1, 'x', -2.5f);   // x is a myclass<int, char, float>

Типичными примерами из стандартной библиотеки, которые используют эту идиому, являются make_shared, make_unique, make_pair, make_tuple, make_exception_ptr и make_optional.

0

в c++ нет объекта, не зависящего от типа, каждый объект должен быть введен, когда он объявлен. Единственный способ добиться стирания стилей - это использовать технику, например, void* и преобразование указателя, которую вы можете найти в стирании типа boost

Ещё вопросы

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