Создание шаблона класса C ++ с аргументами arg, * и * в виде массива

У меня есть шаблонный класс C ++, конструктор которого имеет аргумент по умолчанию.

Может ли это быть реализовано не по умолчанию, а также как массив? (Если нет, то почему нет?)

Любой из них работает, но не оба одновременно (в g ++ 4.6.3):

template <class T> class Cfoo {
public:
int x;
Cfoo(int xarg=42) : x(xarg) {}
};

Cfoo<int> thisWorks[10];
Cfoo<int> thisWorks(43);
Cfoo<int> thisFails(43)[10];
Cfoo<int> thisFails[10](43);
Cfoo<int>[10] thisFails(43);
// (even crazier permutations omitted)

0

Решение

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

Если вам нужна коллекция, в C ++ 98 вы можете использовать std::vector:

std::vector<Cfoo<int> >(10, 43);
1

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

Вы не можете создать массив, используя конструктор не по умолчанию.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector