определения типов для шаблонных классов?

113 длина ноль.

7
задан mch 30 October 2008 в 19:30
поделиться

5 ответов

Нет, это в настоящее время не возможно. Это будет сделано возможным в C++ 0X AFAIK.

Лучшее, о котором я могу думать,

template<typename T> struct LongCollection {
    typedef std::vector< boost::shared_ptr< LongClassName<T> > > type;
};

LongCollection<float>::type m_foo;
14
ответ дан 6 December 2019 в 08:17
поделиться

Нет, но можно быть рядом с помощью типа 'помощника', видеть этот пример.

2
ответ дан 6 December 2019 в 08:17
поделиться

Если Вы не хотите идти макро-путем, необходимо сделать отдельные определения типов для каждого типа:

typedef std::vector< boost::shared_ptr< LongClassName<float> > > FloatCollection;
typedef std::vector< boost::shared_ptr< LongClassName<double> > > DoubleCollection;
3
ответ дан 6 December 2019 в 08:17
поделиться

Решение, показанное Leon, является каноническим. Бит фонового знания: Это называют “(шаблон) метафункцией”, потому что это - в основном “функция”, которая оценена во время компиляции. Вместо значений это имеет дело с типами: существует список входных типов (аргументы типа) и существует “возвращаемое значение”: определение типа, которое объявляет имя типа “тип”.

“Вызов” работает аналогично к нормальному вызову функции, хотя с другим синтаксисом:

// Normal function
result = f(args);

// Metafunction
typedef f<args>::type result;

Эта конструкция кода является часто используемой идиомой в библиотеках, таких как библиотеки Boost и даже в STL в одном месте: allocator_type::rebind<U>::other выполняет то же самое с единственной разницей что определение типа type назван other.

2
ответ дан 6 December 2019 в 08:17
поделиться

Не точно, что Вы просите, но это могло бы достигнуть желаемого эффекта в зависимости от Вашей фактической ситуации:

template <typename myfloat_t>
class LongClassName
{
    // ...
};

template <typename myfloat_t>
class LongCollection : public std::vector< boost::shared_ptr< LongClassName<myfloat_t> > > 
{
};

Вы, возможно, должны добавить некоторых конструкторов или операторы в зависимости от Ваших потребностей.

1
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: