1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ****************************************************************************** 5 * 6 * Copyright (C) 2016, International Business Machines 7 * Corporation and others. All Rights Reserved. 8 * 9 ****************************************************************************** 10 * 11 * File: cstr.h 12 */ 13 14 #ifndef CSTR_H 15 #define CSTR_H 16 17 #include "unicode/unistr.h" 18 #include "unicode/uobject.h" 19 #include "unicode/utypes.h" 20 21 #include "charstr.h" 22 23 /** 24 * ICU-internal class CStr, a small helper class to facilitate passing UnicodeStrings 25 * to functions needing (const char *) strings, such as printf(). 26 * 27 * It is intended primarily for use in debugging or in tests. Uses platform 28 * default code page conversion, which will do the best job possible, 29 * but may be lossy, depending on the platform. 30 * 31 * If no other conversion is available, use invariant conversion and substitue 32 * '?' for non-invariant characters. 33 * 34 * Example Usage: 35 * UnicodeString s = whatever; 36 * printf("%s", CStr(s)()); 37 * 38 * The explicit call to the CStr() constructor creates a temporary object. 39 * Operator () on the temporary object returns a (const char *) pointer. 40 * The lifetime of the (const char *) data is that of the temporary object, 41 * which works well when passing it as a parameter to another function, such as printf. 42 */ 43 44 U_NAMESPACE_BEGIN 45 46 class U_COMMON_API CStr : public UMemory { 47 public: 48 CStr(const UnicodeString &in); 49 ~CStr(); 50 const char * operator ()() const; 51 52 private: 53 CharString s; 54 CStr(const CStr &other); // Forbid copying of this class. 55 CStr &operator =(const CStr &other); // Forbid assignment. 56 }; 57 58 U_NAMESPACE_END 59 60 #endif 61