haker_fox 164 March 5 Posted March 5 · Report post 6 hours ago, Anxigeros said: Если именно "мощь ООП", то только через интерфейсы! Спасибо огромное! Буду изучать ваши примеры!)) Quote Share this post Link to post Share on other sites More sharing options...
razrab83 27 March 17 Posted March 17 · Report post В 04.03.2026 в 08:39, haker_fox сказал: s.get(chvalue).поле_структуры = некое_значение; метод get() обычно ассоциируется с «получить объект/ресурс». Как то не очевидно, что тут возвращается ссылка и меняется именно содержимое s. Если прямо уж очень хочется оставить get(), то возвращать не ссылку, а указатель s.get(chvalue)->поле_структуры = некое_значение; // тут сразу видно, что по указателю меняется s. Можно в оформить через прокси struct VSettings { float voltage; int my_digits; }; struct ASettings { float voltage; int my_digits; }; struct Settings { VSettings voltmeter; ASettings ampermeter; struct Proxy { float& voltage; int& my_digits; // конструктор прокси Proxy(VSettings& v) : voltage(v.voltage), my_digits(v.my_digits) {} Proxy(ASettings& a) : voltage(a.voltage), my_digits(a.my_digits) {} }; Proxy operator()(int ch) { if (ch < 3) return Proxy{voltmeter}; else return Proxy{ampermeter}; } }; int main() { Settings s; s(0).voltage = 3.3f; // s(0).my_digits = 5; s(4).voltage = 1.2f; s(4).my_digits = 3; std::cout << "voltmeter.voltage = " << s.voltmeter.voltage << "\n"; std::cout << "voltmeter.my_digits = " << s.voltmeter.my_digits << "\n"; std::cout << "ampermeter.amperage = " << s.ampermeter.amperage << "\n"; std::cout << "ampermeter.my_digits = " << s.ampermeter.my_digits << "\n"; } Quote Share this post Link to post Share on other sites More sharing options...