Платформа для привязки свойств объекта к элементам управления WTL

Хотелось бы иметь что-то вроде этого:

class Foo {
private:
  int bar;
public:
  void setBar(int bar);
  int getBar() const;
}

class MyDialog : public CDialogImpl<MyDialog> {
  BEGIN_MODEL_MAPPING()
    MAP_INT_EDITOR(m_editBar, m_model, getBar, setBar);
  END_MODEL_MAPPING()
  // other methods and message map
private:
  Foo * m_model;
  CEdit m_editBar;
}

Также было бы здорово, если бы я мог предоставить свои собственные проверки:

MAP_VALIDATED_INT_EDITOR(m_editBar, m_model, getBar, setBar, validateBar)
...
bool validateBar (int value) {
  // custom validation
}

Кто-нибудь видел что-то подобное?

P.S. Мне не нравится DDX, потому что он старый и негибкий, и я не могу использовать геттеры и сеттеры.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
457
2

Ответы 2

Связки какао предоставляют именно то, что вы хотите, но они доступны только в слове Mac / Objective-C. GNUstep - его бесплатная версия, но она по-прежнему Objective-C, а не C++.

Однако это может быть хорошим источником вдохновения для создания собственной структуры или хорошей отправной точкой для дальнейших исследований.

Приятно слышать, что это может будет реализовано. «Исследования» с помощью гугла результатов не приносят. Если ответов больше не будет, наверное, придется писать свой фреймворк.

cos 23.09.2008 22:10

Карта DDX - это просто набор операторов if, поэтому вы можете легко написать свой собственный макрос DDX.

#define DDX_MAP_VALIDATED_INT_EDITOR(control, variable, getter, setter, validator)\
    if (nCtlID==control.GetDlgCtrlID())\
    {\
        if (bSaveAndValidate)\
        {\
            int const value=control.GetDlgItemInt();\
            if (validator(value))\
            {\
                variable->setter(value);\
            }\
            else\
            {\
                return false;\
            }\
        }\
        else\
        {\
            control.SetDlgItemInt(variable->getter());\
        }\
    }

Это не проверено, но должно работать в соответствии с вашим примером, если вы поместите его в карту DDX. Это должно дать вам представление. Конечно, вы можете извлечь это в функцию, что и делают стандартные макросы DDX: они просто выполняют внешний if, а затем вызывают функцию. Это позволит вам перегрузить функцию для разных типов variable (например, указатель vs ссылка / значение)

Другие вопросы по теме