Ответы пользователя по тегу C++
  • С++. Зависимость возвращаемого функцией типа от значения ее параметра?

    burdakovd
    @burdakovd
    Определитесь, вызывающая сторона будет знать на этапе компиляции объект какого типа ей нужно получить?

    Если будет, то сделайте переключающий параметр параметром шаблона, как предлагал .

    Если не будет, то можно сделать чтобы типы A и B реализовывали общий интерфейс I. В интерфейсе описать все методы, которые вызывающая сторона требует от этих типов.
    И возвращать из функции указатель на I.

    Типа
    class I {
        // interface
        // ...
        virtual ~I() {}
    };
    
    class A: public I { ... }
    class B: public I { ... }
    
    I* foo(const int sw) {
        return sw == 0 ? new A(...) : new B(...);
    }
    
    


    Разумеется можно возвращать не сырой указатель, а unique_ptr
    Ответ написан
    Комментировать
  • Хранение списка параметров с возможностью обращения по имени

    burdakovd
    @burdakovd
    Хранение — хэш-таблицы (или std::map, если с производительностью проблем нет).

    Парсинг — это уже другой вопрос.
    Ответ написан
    Комментировать
  • C++ ООП и переопределение функции

    burdakovd
    @burdakovd
    Насколько я понял вам нужно что-то типа замыкания.
    Хотя не уверен, обилие незнакомого для меня Qt пугает.

    Если передавать функции в стиле Си, то фэйл, передать можно указатель на функцию или статический метод, а оттуда к this доступ не получить, на то она и статическая.

    В стиле Си это можно решить, сделав сигнатуру функции не int (*func)(), а int (*func)(void*). То есть функция ожидает в качестве параметра контекст исполнения. И в конструктор Test передавать помимо функции это контекст. Ну а в этом void* можно передать this.

    В стиле C++ можно сделать так:

    class Runnable() {
    virtual int run() = 0;
    }

    И конструктор Test будет принимать не указатель на функцию, а указатель типа Runnable*.

    Ну а дальше дело техники, внутри Pair01 можно создать вспомогательный класс, реализующий интерфейс Runnable, который будет хранить указатель на экземпляр Pair01 и в методе Run вызывать уже нестатический Test1 или Test2 или Test3…

    В языках с поддержкой замыканий это было бы тривиально, а в C++ приходится реализовывать их явно.

    Также boost возможно имеет функции для такого, сам не пользовался, но где-то видел что такое решали с помощью bind1st.

    В свою очередь надеюсь, что что-то из этого понятно=)
    Ответ написан