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

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

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

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

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

myclass<a,b,c> x;

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

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

myclass<int,double,int> x;

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

0

Решение

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

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

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

0

Другие решения

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

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,

1

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

0
По вопросам рекламы [email protected]