andersnb@lab.nyu.edu (Brian Anderson) (12/11/89)
Hi,
I have an object that uses the va_arg facility to create an
object that has an unknown size until runtime:
class A {
private:
char* thing;
public:
A(int i...) {
// create space for thing and
// use va_arg to read in i arguments
// placing them in thing
}
};
I must do it this way since the size of each argument is
variable and I don't want to waste space using unions. This work
fine. However, I now want to inherit this class into another class B.
I there anyway to pass the variable number of arguments from class B's
constructor to the constructor of A? For example (probably not valid
C++ code):
class B: A {
public:
B(int i...): A(i...) {
// other stuff
}
};
Is there a better way to do this? Remember I am very
concerned about space utilization, so an array of union types is not a
good answer.
--
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Brian G. Anderson |
NYU Ultracomputer Research Project |||
715 Broadway Rm. 1006 |||||
New York, NY 10003 |||||
(212) 998-3346 --- //\ ---
arpa: andersnb@cmcl2 ----/ \----
uucp: {ihnp4,seismo}!cmcl2!andersnb ---- ----chip@ateng.com (Chip Salzenberg) (12/13/89)
According to andersnb@lab.nyu.edu (Brian Anderson): >class A { >private: > char* thing; >public: > A(int i...) { > // parse arguments > } >}; > >class B: A { >public: > B(int i...): A(i...) { > // other stuff > } >}; I don't think you can do what I think you want. But if you provide a version of A's constructur that's fast and does nothing, you can then call A::init() with a va_list argument: class A { public: A(int i ...); protected: init(int, va_list); // does all the construction work private: char *thing; }; class B: public A { public: B(int i ...); }; A::init(int i, va_list ap) { if (i) { // allocate thing, etc. } else thing = NULL; } A::A(int i ...) { va_list ap; va_start(ap, i); init(i, ap); va_end(ap); } B::B(int i ...) : A(0) // note that init(0) does nothing important { va_list ap; va_start(ap, i); init(i, ap); va_end(ap); } It could get more complicated, but this will work. -- You may redistribute this article only to those who may freely do likewise. Chip Salzenberg at A T Engineering; <chip@ateng.com> or <uunet!ateng!chip> "The Usenet, in a very real sense, does not exist."