diff options
author | Abseil Team <absl-team@google.com> | 2022-10-10 13:38:18 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-10-10 13:39:13 -0700 |
commit | a0b5e3273bf6780b83c6e7fab23a5a92d6a005b7 (patch) | |
tree | c5d11870b3f73c27bd18a88fae3186ad2eb93924 /absl/strings/str_cat.h | |
parent | 2ed6963f2b67a68d94303cafb571d3d039a49f9a (diff) | |
download | abseil-a0b5e3273bf6780b83c6e7fab23a5a92d6a005b7.tar.gz abseil-a0b5e3273bf6780b83c6e7fab23a5a92d6a005b7.tar.bz2 abseil-a0b5e3273bf6780b83c6e7fab23a5a92d6a005b7.zip |
Adds documentation for stringification extension
PiperOrigin-RevId: 480166410
Change-Id: Ie915e98747ffda0d1f0e5a72383f5dd9fc940970
Diffstat (limited to 'absl/strings/str_cat.h')
-rw-r--r-- | absl/strings/str_cat.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/absl/strings/str_cat.h b/absl/strings/str_cat.h index 6ee88f14..8a63be0d 100644 --- a/absl/strings/str_cat.h +++ b/absl/strings/str_cat.h @@ -77,6 +77,43 @@ struct AlphaNumBuffer { size_t size; }; +//------------------------------------------------------------------------------ +// StrCat Extension +//------------------------------------------------------------------------------ +// +// AbslStringify() +// +// A simple customization API for formatting user-defined types using +// absl::StrCat(). The API relies on detecting an overload in the +// user-defined type's namespace of a free (non-member) `AbslStringify()` +// function as a friend definition with the following signature: +// +// template <typename Sink> +// void AbslStringify(Sink& sink, const X& value); +// +// An `AbslStringify()` overload for a type should only be declared in the same +// file and namespace as said type. +// +// Note that AbslStringify() also supports use with absl::StrFormat(). +// +// Example: +// +// struct Point { +// // To add formatting support to `Point`, we simply need to add a free +// // (non-member) function `AbslStringify()`. This method specifies how +// // Point should be printed when absl::StrCat() is called on it. You can add +// // such a free function using a friend declaration within the body of the +// // class. The sink parameter is a templated type to avoid requiring +// // dependencies. +// template <typename Sink> friend void AbslStringify(Sink& +// sink, const Point& p) { +// absl::Format(&sink, "(%v, %v)", p.x, p.y); +// } +// +// int x; +// int y; +// }; + class StringifySink { public: void Append(size_t count, char ch); |