¿Mejor manera de usar C ++ nombre parámetro idioma?

He estado desarrollando una biblioteca GUI para Windows (como un proyecto paralelo personal, sin aspiraciones de utilidad). Para mi clase de ventana principal, he configurado una jerarquía de clases de opciones (usando laNombre del parámetro nombre), porque algunas opciones son compartidas y otras son específicas para determinados tipos de ventanas (como diálogos).

La forma en que funciona el nombre de parámetro con nombre, las funciones de la clase de parámetro tienen que devolver el objeto al que se llama. El problema es que, en la jerarquía, cada uno tiene que ser undiferente clase - lacreateWindowOpts clase para ventanas estándar, lacreateDialogOpts clase para diálogos, y similares. He tratado con eso haciendo todas las plantillas de clases de opción. Aquí hay un ejemplo:

template <class T>
class _sharedWindowOpts: public detail::_baseCreateWindowOpts {
    public: ///////////////////////////////////////////////////////////////
    // No required parameters in this case.
    _sharedWindowOpts() { };

    typedef T optType;

    // Commonly used options
    optType& at(int x, int y) { mX=x; mY=y; return static_cast<optType&>(*this); }; // Where to put the upper-left corner of the window; if not specified, the system sets it to a default position
    optType& at(int x, int y, int width, int height) { mX=x; mY=y; mWidth=width; mHeight=height; return static_cast<optType&>(*this); }; // Sets the position and size of the window in a single call
    optType& background(HBRUSH b) { mBackground=b; return static_cast<optType&>(*this); }; // Sets the default background to this brush
    optType& background(INT_PTR b) { mBackground=HBRUSH(b+1); return static_cast<optType&>(*this); }; // Sets the default background to one of the COLOR_* colors; defaults to COLOR_WINDOW
    optType& cursor(HCURSOR c) { mCursor=c; return static_cast<optType&>(*this); }; // Sets the default mouse cursor for this window; defaults to the standard arrow
    optType& hidden() { mStyle&=~WS_VISIBLE; return static_cast<optType&>(*this); }; // Windows are visible by default
    optType& icon(HICON iconLarge, HICON iconSmall=0) { mIcon=iconLarge; mSmallIcon=iconSmall; return static_cast<optType&>(*this); }; // Specifies the icon, and optionally a small icon
    // ...Many others removed...
};

template <class T>
class _createWindowOpts: public _sharedWindowOpts<T> {
    public: ///////////////////////////////////////////////////////////////
    _createWindowOpts() { };

    // These can't be used with child windows, or aren't needed
    optType& menu(HMENU m) { mMenuOrId=m; return static_cast<optType&>(*this); }; // Gives the window a menu
    optType& owner(HWND hwnd) { mParentOrOwner=hwnd; return static_cast<optType&>(*this); }; // Sets the optional parent/owner
};

class createWindowOpts: public _createWindowOpts<createWindowOpts> {
    public: ///////////////////////////////////////////////////////////////
    createWindowOpts() { };
};

Funciona, pero como puede ver, requiere una cantidad considerable de trabajo adicional: una conversión de tipos en el tipo de retorno para cada función, clases de plantillas adicionales, etc.

Mi pregunta es, ¿hay una manera más fácil de implementar el lenguaje de parámetros nombrados en este caso, uno que no requiera todas las cosas adicionales?

Respuestas a la pregunta(6)

Su respuesta a la pregunta