HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
UT_Variadic.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: UT_Variadic.h (UT Library, C++)
7  *
8  * COMMENTS:
9  */
10 
11 #ifndef __UT_Variadic__
12 #define __UT_Variadic__
13 
14 #include "UT_Array.h"
15 
16 /// Build a list of variadic arguments of the given template type
17 ///
18 /// C-Style variadic arguments are error prone for various reasons:
19 /// - No type checking
20 /// - NULL termination issues
21 ///
22 /// This class provides type-safety and a cleaner interface. For example, to
23 /// accept a variable length array of strings: @code
24 /// typedef UT_VariadicT<const char *> VariadicStrings;
25 /// void
26 /// function(const VariadicStrings &strings)
27 /// {
28 /// for (exint i = 0; i < strings.entries(); ++i)
29 /// cerr << i << " " << strings.item(i) << " " strlen(strings.item(i));
30 /// }
31 ///
32 /// // Which can be called using
33 /// function(VariadicStrings() << "hello" << "world");
34 /// @endcode
35 template <typename T>
37 {
38 public:
39 
41  {
42  myItems.append(&val);
43  return *this;
44  }
45 
46  exint entries() const { return myItems.entries(); }
47  const T &item(exint arg) const { return *myItems(arg); }
48 
49  void append(const T &v) { myItems.append(&v); }
50 
51 protected:
53 };
54 
55 #endif
const T & item(exint arg) const
Definition: UT_Variadic.h:47
const GLdouble * v
Definition: glcorearb.h:837
int64 exint
Definition: SYS_Types.h:125
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Definition: core.h:1859
UT_Array< const T * > myItems
Definition: UT_Variadic.h:52
UT_VariadicT< T > & operator<<(const T &val)
Definition: UT_Variadic.h:40
exint append()
Definition: UT_Array.h:142
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:669
exint entries() const
Definition: UT_Variadic.h:46
void append(const T &v)
Definition: UT_Variadic.h:49
GLuint GLfloat * val
Definition: glcorearb.h:1608