Jump to content
    

Си++ 17, возвращаемый тип функции должен зависеть от значения аргумента

6 hours ago, Anxigeros said:

Если именно "мощь ООП", то только через интерфейсы!

Спасибо огромное! Буду изучать ваши примеры!))

Share this post


Link to post
Share on other sites

В 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";
}

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...