In C and in C++ it is possible to define functions that have parameter lists ending with an ellipsis (. . .). The ellipsis allows the number of parameters and their types to be specified by the caller. The usual example of such a function is from
int printf(char* formatstr, ...)
This flexible mechanism permits calls such as
printf("Eschew Obfuscation! "); printf("%d days hath %s ", 30, "September");
To define a function that uses the ellipsis you need to
#include
which adds to the std namespace a set of macros for accessing the items in the argument list. There must be at least one parameter other than the ellipsis in the parameter list. A variable, usually named ap (argument pointer), of type va_list is used to traverse the list of unnamed arguments. The macro
va_start(ap, p)
where p is the last named parameter in the list, initializes ap so that it points to the first of the unnamed arguments. The macro
va_arg(ap, typename)
returns the argument that ap is pointing to and uses the typename to determine (i.e., with sizeof) how large a step to take to find the next argument. The macro
va_end(ap)
must be called after all of the unnamed arguments have been processed. It cleans up the unnamed argument stack and ensures that the program will behave properly after the function has terminated.
Example 24.1 shows how to use these features.
#include
|
Part I: Introduction to C++ and Qt 4
C++ Introduction
Classes
Introduction to Qt
Lists
Functions
Inheritance and Polymorphism
Part II: Higher-Level Programming
Libraries
Introduction to Design Patterns
QObject
Generics and Containers
Qt GUI Widgets
Concurrency
Validation and Regular Expressions
Parsing XML
Meta Objects, Properties, and Reflective Programming
More Design Patterns
Models and Views
Qt SQL Classes
Part III: C++ Language Reference
Types and Expressions
Scope and Storage Class
Statements and Control Structures
Memory Access
Chapter Summary
Inheritance in Detail
Miscellaneous Topics
Part IV: Programming Assignments
MP3 Jukebox Assignments
Part V: Appendices
MP3 Jukebox Assignments
Bibliography
MP3 Jukebox Assignments