This project helps you use named parameters idiom in C++, with no runtime cost[1]. It differs from other libraries such that the user don't need to modify the function they want to use with named parameters.
Obtain a version of named_parameters.hpp
from release page
and include it in your project.
If you want to build it yourself, follow instructions at Building section.
The header file contains macros which help writing wrappers with named parameters. Create wrappers as follows:
#define Vector3d( ... ) \
MAKE_NAMED_3( Eigen::Vector3d, x, y, z, __VA_ARGS__ )
This examples wraps Eigen's Vector3d
in a macro with the same name. Macro is defined
to accept 3 parameters with names x, y and z. The order of parameters used in the
macro should match the function definition. ...
and __VA_ARGS__
need to be present
in the definition as shown above.
With the macro defined, it can be called as follows:
Vector3d( x = 1.0, y = 2.0, z = 3.0 ); // Equivalent to Eigen::Vector3d( 1.0, 2.0, 3.0 )
Vector3d( z = 3.0, y = 2.0, x = 1.0 ); // Also equivalent to Eigen::Vector3d( 1.0, 2.0, 3.0 )
As this library is impleented with macros, wrapping non-static member functions can
be done when this
is also passed as a parameter. An example is std::vector
's insert
function, which accepts position
and value
paremeters. Notice the MEMBER
part of
the MAKE_NAMED_XXX
macro, which causes this
parameter to be added (not-named).
#define VectorInsert( ... ) \
MAKE_NAMED_MEMBER_2( insert, position, value, __VA_ARGS__ )
Now v.insert( v.end(), 100 )
can be replaced by one of the following calls with named parameters.
VectorInsert( v, position = v.end(), value = 100 );
VectorInsert( v, value = 100, position = v.end() );
As part of the implementation, this library wraps named parameter calls in a trivial lambda expression. GCC generates indentical or equivalent assemblies on optimized builds.
A Compiler Explorer example can be found here. In the example, same code is compiled with and without named parameter wrappers, and assemblies can be compared in diff view.
cd into directory and type make
, which should generate dist/named_parameters.hpp
.
The MIT License. See COPYING file.