Googletest export
- 277898422 BEGIN_PUBLIC by Abseil Team <absl-team@google.com> PiperOrigin-RevId: 277898422
This commit is contained in:
committed by
Gennadiy Civil
parent
c27acebba3
commit
0f0634a66e
@@ -6,15 +6,18 @@ Template and macro libraries often need to define many classes, functions, or
|
||||
macros that vary only (or almost only) in the number of arguments they take.
|
||||
It's a lot of repetitive, mechanical, and error-prone work.
|
||||
|
||||
Our experience is that it's tedious to write custom scripts, which tend to
|
||||
reflect the structure of the generated code poorly and are often hard to read
|
||||
and edit. For example, a small change needed in the generated code may require
|
||||
some non-intuitive, non-trivial changes in the script. This is especially
|
||||
painful when experimenting with the code.
|
||||
Variadic templates and variadic macros can alleviate the problem. However, while
|
||||
both are being considered by the C++ committee, neither is in the standard yet
|
||||
or widely supported by compilers. Thus they are often not a good choice,
|
||||
especially when your code needs to be portable. And their capabilities are still
|
||||
limited.
|
||||
|
||||
This script may be useful for generating meta code, for example a series of
|
||||
macros of FOO1, FOO2, etc. Nevertheless, please make it your last resort
|
||||
technique by favouring C++ template metaprogramming or variadic macros.
|
||||
As a result, authors of such libraries often have to write scripts to generate
|
||||
their implementation. However, our experience is that it's tedious to write such
|
||||
scripts, which tend to reflect the structure of the generated code poorly and
|
||||
are often hard to read and edit. For example, a small change needed in the
|
||||
generated code may require some non-intuitive, non-trivial changes in the
|
||||
script. This is especially painful when experimenting with the code.
|
||||
|
||||
# Our Solution
|
||||
|
||||
|
||||
Reference in New Issue
Block a user