Re: Class containing an array as a member whose size can be specified at the compile time.
"Shivani" <sg_01_in@yahoo.com> schrieb im Newsbeitrag news:1146109931.127711.92370@t31g2000cwb.googlegroups.com...
Hi,
I want to declare a class which has an array as one of it's member
variable. How I can specify the size of the array at the compile time.
That is, i want to have first object obj1 with array size let's say as
10, second object obj2 with array of 20, third object obj3 with array
of 25. Can anyone tell me how I can achieve this.
There are several solutions. You can
1. implement your class as a template, like
template <int N>
class MyClass
{
SomeType array[N];
...
};
...
MyClass<10> object1;
MyClass<20> object2;
MyClass<25> object3;
(of cause, SomeType can be a template parameter, too).
2. pass the size to the constructor and use an std::vector, like
class MyClass
{
std::vector<SomeType> array;
public:
MyClass(int size): array(size) {}
...
};
...
MyClass object1(10);
MyClass object2(20);
MyClass object3(25);
(and again, SomeType could be a template parameter). Using this approach, you can even resize the array at run-time.
3. There are probably many other solutions which do not come to my mind right now.
Methods 1 and 2 both have their pros and cons. For example, using method 2, you could assign object1 to object2 or you can write a function,
that can handle all instances of MyClass, no matter how large the array is. In method 1 MyClass<10> and MyClass<20> are different types, so you
cannot assign object1 to object2 and you cannot write a non-template function, which would accept all of your objects. You have to write a
function that accepts MyClass<10>, another to accept MyClass<20> etc. Or you could write a template function, which accepts objects of any type
created from the MyClass template.
HTH
Heinz
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]