1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.52a
from autosprintf.texi on 27 October 2002 -->
<TITLE>GNU autosprintf</TITLE>
</HEAD>
<BODY>
<H1>GNU autosprintf, version 1.0</H1>
<H2>Formatted Output to Strings in C++</H2>
<ADDRESS>Bruno Haible</ADDRESS>
<P>
<P><HR><P>
<H1>Table of Contents</H1>
<UL>
<LI><A NAME="TOC1" HREF="autosprintf.html#SEC1">1 Introduction</A>
<LI><A NAME="TOC2" HREF="autosprintf.html#SEC2">2 The <CODE>autosprintf</CODE> class</A>
<LI><A NAME="TOC3" HREF="autosprintf.html#SEC3">3 Using <CODE>autosprintf</CODE> in own programs</A>
</UL>
<P><HR><P>
<H1><A NAME="SEC1" HREF="autosprintf.html#TOC1">1 Introduction</A></H1>
<P>
This package makes the C formatted output routines (<CODE>fprintf</CODE> et al.)
usable in C++ programs, for use with the <CODE><string></CODE> strings and the
<CODE><iostream></CODE> streams.
</P>
<P>
It allows to write code like
</P>
<PRE>
cerr << autosprintf ("syntax error in %s:%d: %s", filename, line, errstring);
</PRE>
<P>
instead of
</P>
<PRE>
cerr << "syntax error in " << filename << ":" << line << ": " << errstring;
</PRE>
<P>
The benefits of the autosprintf syntax are:
</P>
<UL>
<LI>
It reuses the standard POSIX printf facility. Easy migration from C to C++.
<LI>
English sentences are kept together.
<LI>
It makes internationalization possible. Internationalization requires format
strings, because in some cases the translator needs to change the order of a
sentence, and more generally it is easier for the translator to work with a
single string for a sentence than with multiple string pieces.
<LI>
It reduces the risk of programming errors due to forgotten state in the
output stream (e.g. <CODE>cout << hex;</CODE> not followed by <CODE>cout << dec;</CODE>).
</UL>
<H1><A NAME="SEC2" HREF="autosprintf.html#TOC2">2 The <CODE>autosprintf</CODE> class</A></H1>
<P>
An instance of class <CODE>autosprintf</CODE> just contains a string with the
formatted output result. Such an instance is usually allocated as an
automatic storage variable, i.e. on the stack, not with <CODE>new</CODE> on the
heap.
</P>
<P>
The constructor <CODE>autosprintf (const char *format, ...)</CODE> takes a format
string and additional arguments, like the C function <CODE>printf</CODE>.
</P>
<P>
Conversions to <CODE>char *</CODE> and <CODE>std::string</CODE> are defined that return
the encapsulated string.
</P>
<P>
The destructor <CODE>~autosprintf ()</CODE> destroys the encapsulated string.
</P>
<P>
An <CODE>operator <<</CODE> is provided that outputs the encapsulated string to the
given <CODE>ostream</CODE>.
</P>
<H1><A NAME="SEC3" HREF="autosprintf.html#TOC3">3 Using <CODE>autosprintf</CODE> in own programs</A></H1>
<P>
To use the <CODE>autosprintf</CODE> class in your programs, you need to add
</P>
<PRE>
#include "autosprintf.h"
using gnu::autosprintf;
</PRE>
<P>
to your source code.
The include file defines the class <CODE>autosprintf</CODE>, in a namespace called
<CODE>gnu</CODE>. The <SAMP>`using´</SAMP> statement makes it possible to use the class
without the (otherwise natural) <CODE>gnu::</CODE> prefix.
</P>
<P>
When linking your program, you need to link with <CODE>libasprintf</CODE>, because
that's where the class is defined. In projects using GNU <CODE>autoconf</CODE>,
this means adding <SAMP>`AC_LIB_LINKFLAGS([asprintf])´</SAMP> to <CODE>configure.in</CODE>
or <CODE>configure.ac</CODE>, and using the @LIBASPRINTF@ Makefile variable that
it provides.
</P>
<P><HR><P>
This document was generated on 27 October 2002 using the
<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
translator version 1.52a.</P>
</BODY>
</HTML>
|