есть конечно методы public, но они не имеют отношения к делу. Проблема в том что метод класс не может возвращать значения разных типов, а только конкретное одно
Ну, во-первых, любая функция может возвращать указатель. И вполне можно написать оверрайдные функции, которые будут возвращать то значение, которое затребовано .
это понятно, но указатель же должен быть конкретного типаа перегруженные функции не помогут, так элемент, например с целым ключом, может одновременно возвратить строковое, вещественное и целое значение
Страуструп: 13.3 Абстрактные типыСамый простой способ ослабить связь между пользователем класса и его создателем, а также между программами, в которых объекты создаются, и программами, в которых они используются, состоит в введении понятия абстрактных базовых классов. Эти классы представляют интерфейс со множеством реализаций одного понятия. Рассмотрим класс set, содержащий множество объектов типа T:. . . . class set {. . . . . public:. . . . . . . virtual void insert(T*) = 0;. . . . . . . virtual void remove(T*) = 0;. . . . . . . virtual int is_member(T*) = 0;. . . . . . . virtual T* first() = 0;. . . . . . . virtual T* next() = 0;. . . . . . . virtual ~set() { }. . . . . };
Какова конечная цель?Лично мое мнение, что Вы задумали какую-то ерунду.Но можете почтитать например:http://www.boost.org/doc/libs/1_43_0/doc/html/boost/ .
Серж Андреев верно советует.Суть: создается базовый абстрактный класс(интерфейс) Object, реализующий основные операции. От него наследуются дочерние классы: Int, Double, Blablabla. Далее, идея: функция возвращает Object*, а его уже можно интерпретировать и как Int*, и как Double*, и т. д. Можно для удобства обернуть переменную типа Object* в класс, в котором сделать поле, хранящее информацию о типе, перегрузить пару операторов . И получим полноценный тип Variant :)