And how would your macros automatically keep the wrappers up to date?
const unsigned int sfVideoMode_bitsPerPixel_default = 32;
const unsigned int ContextSettings_depth_default = 0;
const unsigned int ContextSettings_stencil_default = 0;
const unsigned int ContextSettings_antialiasing_default = 0;
const unsigned int ContextSettings_major_default = 2;
const unsigned int ContextSettings_minor_default = 0;
const unsigned int sfSoundRecorder_start_sampleRate_default = 44100;
const unsigned short sfFtp_connect_port_default = 21;
const sfTime sfFtp_connect_timeout_default = sfTime_Zero;
const char* sfFtp_login_userName_default = "";
const char* sfFtp_login_password_default = "";
const char* sfFtp_getDirectoryListing_directory_default = "";
const sfFtpTransferMode sfFtp_download_mode_default = sfFtpBinary;
const sfFtpTransferMode sfFtp_upload_mode_default = sfFtpBinary;
const sfUint8 sfColor_a_default = 255;
const sfIntRect sfIntRect_Zero = { 0, 0, 0, 0 };
const sfIntRect sfImage_copyImage_sourceRect_default = sfIntRect_Zero;
const sfBool sfImage_copyImage_applyAlpha_default = sfFalse;
const sfBlendMode sfRenderStates_blendMode_default = sfBlendAlpha;
const sfTransform sfRenderStates_transform_default = sfTransform_Identity;
const sfTexture* sfRenderStates_texture_default = NULL;
const sfShader* sfRenderStates_shader_default = NULL;
const sfRenderStates* sfRenderWindow_drawSprite_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawText_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawShape_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawCircleShape_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawConvexShape_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawRectangleShape_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawVertexArray_states_default = NULL;
const sfRenderStates* sfRenderWindow_drawPrimitives_states_default = NULL;
const sfBool sfRenderTexture_create_depthBuffer_default = sfFalse;
const sfBool sfRenderTexture_setActive_active_default = sfTrue;
const sfUint32 sfWindow_create_style_default = sfDefaultStyle;
const sfContextSettings* sfWindow_create_settings_default = NULL;
const sfUint32 sfRenderWindow_create_style_default = sfDefaultStyle;
const sfContextSettings* sfRenderWindow_create_settings_default = NULL;
const sfContextSettings* sfWindow_createFromHandle_settings_default = NULL;
const sfContextSettings* sfRenderWindow_createFromHandle_settings_default = NULL;
const sfBool sfRectangleShape_setTexture_resetRect_default = sfFalse;
const sfBool sfSprite_setTexture_resetRect_default = sfFalse;
const unsigned int sfText_setCharacterSize_characterSize_default = 30;
const sfIntRect* sfTexture_createFromFile_area_default = NULL;
const sfIntRect* sfTexture_createFromMemory_area_default = NULL;
const sfIntRect* sfTexture_createFromStream_area_default = NULL;
const sfIntRect* sfTexture_createFromImage_area_default = NULL;
static inline unsigned int sfVector2u_get_x(sfVector2u v) { return v.x }
static inline unsigned int sfVector2u_get_y(sfVector2u v) { return v.y }
#define sfTexture_updateFromImage_width_default sfVector2u_get_x(sfImage_getSize(image))
#define sfTexture_updateFromImage_height_default sfVector2u_get_y(sfImage_getSize(image))
const unsigned int sfTexture_updateFromImage_x_default = 0;
const unsigned int sfTexture_updateFromImage_y_default = 0;
#define sfTexture_updateFromPixels_width_default sfVector2u_get_x(sfTexture_getSize(texture))
#define sfTexture_updateFromPixels_height_default sfVector2u_get_y(sfTexture_getSize(texture))
const unsigned int sfTexture_updateFromPixels_x_default = 0;
const unsigned int sfTexture_updateFromPixels_y_default = 0;
const unsigned int sfTexture_updateFromWindow_x_default = 0;
const unsigned int sfTexture_updateFromWindow_y_default = 0;
The previous code is produced by cpp from the file below.
(I put it for readablility to see what we get)
////////////////////////////////////////////////////////////
//
// SFML Default Args - Default arguments for the SFML library
// Copyright (C) 2012 <My Name> (ask me my name if you want to use it)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the
// use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
////////////////////////////////////////////////////////////
#define MAKE_DEFAULT_PARAM(elem_name, param_type, param_name, default_value) \
const param_type elem_name##_##param_name##_default = default_value;
#define DEFAULT_PARAM_FROM_FUNC(elem_name, param_type, param_name, func) \
SHARP define elem_name##_##param_name##_default func
MAKE_DEFAULT_PARAM( sfVideoMode, unsigned int, bitsPerPixel, 32 )
MAKE_DEFAULT_PARAM( ContextSettings, unsigned int, depth, 0 )
MAKE_DEFAULT_PARAM( ContextSettings, unsigned int, stencil, 0 )
MAKE_DEFAULT_PARAM( ContextSettings, unsigned int, antialiasing, 0 )
MAKE_DEFAULT_PARAM( ContextSettings, unsigned int, major, 2 )
MAKE_DEFAULT_PARAM( ContextSettings, unsigned int, minor, 0 )
MAKE_DEFAULT_PARAM( sfSoundRecorder_start, unsigned int, sampleRate, 44100 )
MAKE_DEFAULT_PARAM( sfFtp_connect, unsigned short, port, 21 )
MAKE_DEFAULT_PARAM( sfFtp_connect, sfTime, timeout, sfTime_Zero )
MAKE_DEFAULT_PARAM( sfFtp_login, char*, userName, "" )
MAKE_DEFAULT_PARAM( sfFtp_login, char*, password, "" )
MAKE_DEFAULT_PARAM( sfFtp_getDirectoryListing, char*, directory, "" )
MAKE_DEFAULT_PARAM( sfFtp_download, sfFtpTransferMode, mode, sfFtpBinary )
MAKE_DEFAULT_PARAM( sfFtp_upload, sfFtpTransferMode, mode, sfFtpBinary )
MAKE_DEFAULT_PARAM( sfColor, sfUint8, a, 255 )
const sfIntRect sfIntRect_Zero = { 0, 0, 0, 0 };
MAKE_DEFAULT_PARAM( sfImage_copyImage, sfIntRect, sourceRect, sfIntRect_Zero )
MAKE_DEFAULT_PARAM( sfImage_copyImage, sfBool, applyAlpha, sfFalse )
MAKE_DEFAULT_PARAM( sfRenderStates, sfBlendMode, blendMode, sfBlendAlpha )
MAKE_DEFAULT_PARAM( sfRenderStates, sfTransform, transform, sfTransform_Identity )
MAKE_DEFAULT_PARAM( sfRenderStates, sfTexture*, texture, NULL )
MAKE_DEFAULT_PARAM( sfRenderStates, sfShader*, shader, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawSprite, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawText, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawShape, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawCircleShape, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawConvexShape, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawRectangleShape, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawVertexArray, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_drawPrimitives, sfRenderStates*, states, NULL )
MAKE_DEFAULT_PARAM( sfRenderTexture_create, sfBool, depthBuffer, sfFalse )
MAKE_DEFAULT_PARAM( sfRenderTexture_setActive, sfBool, active, sfTrue )
MAKE_DEFAULT_PARAM( sfWindow_create, sfUint32, style, sfDefaultStyle )
MAKE_DEFAULT_PARAM( sfWindow_create, sfContextSettings*, settings, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_create, sfUint32, style, sfDefaultStyle )
MAKE_DEFAULT_PARAM( sfRenderWindow_create, sfContextSettings*, settings, NULL )
MAKE_DEFAULT_PARAM( sfWindow_createFromHandle, sfContextSettings*, settings, NULL )
MAKE_DEFAULT_PARAM( sfRenderWindow_createFromHandle, sfContextSettings*, settings, NULL )
MAKE_DEFAULT_PARAM( sfRectangleShape_setTexture, sfBool, resetRect, sfFalse )
MAKE_DEFAULT_PARAM( sfSprite_setTexture, sfBool, resetRect, sfFalse )
MAKE_DEFAULT_PARAM( sfText_setCharacterSize, unsigned int, characterSize, 30 )
MAKE_DEFAULT_PARAM( sfTexture_createFromFile, sfIntRect*, area, NULL )
MAKE_DEFAULT_PARAM( sfTexture_createFromMemory, sfIntRect*, area, NULL )
MAKE_DEFAULT_PARAM( sfTexture_createFromStream, sfIntRect*, area, NULL )
MAKE_DEFAULT_PARAM( sfTexture_createFromImage, sfIntRect*, area, NULL )
static inline unsigned int sfVector2u_get_x(sfVector2u v) { return v.x }
static inline unsigned int sfVector2u_get_y(sfVector2u v) { return v.y }
DEFAULT_PARAM_FROM_FUNC( sfTexture_updateFromImage, unsigned int, width, sfVector2u_get_x(sfImage_getSize(image)) )
DEFAULT_PARAM_FROM_FUNC( sfTexture_updateFromImage, unsigned int, height, sfVector2u_get_y(sfImage_getSize(image)) )
MAKE_DEFAULT_PARAM( sfTexture_updateFromImage, unsigned int, x, 0 )
MAKE_DEFAULT_PARAM( sfTexture_updateFromImage, unsigned int, y, 0 )
DEFAULT_PARAM_FROM_FUNC( sfTexture_updateFromPixels, unsigned int, width, sfVector2u_get_x(sfTexture_getSize(texture)) )
DEFAULT_PARAM_FROM_FUNC( sfTexture_updateFromPixels, unsigned int, height, sfVector2u_get_y(sfTexture_getSize(texture)) )
MAKE_DEFAULT_PARAM( sfTexture_updateFromPixels, unsigned int, x, 0 )
MAKE_DEFAULT_PARAM( sfTexture_updateFromPixels, unsigned int, y, 0 )
MAKE_DEFAULT_PARAM( sfTexture_updateFromWindow, unsigned int, x, 0 )
MAKE_DEFAULT_PARAM( sfTexture_updateFromWindow, unsigned int, y, 0 )