У меня есть шаблонный класс 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)
Вы правы: вы можете создавать элементы по умолчанию только в массиве, в то время как вы можете передать любой аргумент, который вам нравится, в конструкцию отдельного объекта.
Если вам нужна коллекция, в C ++ 98 вы можете использовать std::vector
:
std::vector<Cfoo<int> >(10, 43);
Вы не можете создать массив, используя конструктор не по умолчанию.