не кастя явно в определенный тип ?
Какой метод вызвать хочешь?
в any не известен заранее набор типов
Нельзя по причине, указанной выше - набор типов неизвестен
Метод типа который хранится в std::any
std::invoke (any.type::method, agrs) типо такого
Без каста нельзя. std any это обёртка над void* и reinterpret_cast.
Ну, а как тогда ты без преобразования типа это сделаешь?
Используйте для этого std::function, передав туда либо лямбду, оборачивающую вызов метода объекта, либо результат вызова std::bind_front(&A::method, a)/std::bind(&A::method, a, /* ... */)
Можно написать самому
Не, там сложнее немного
Ну не немного
Я имею ввиду как преобразование сделать без явного указания типа, т.е взять тип из std any
Хм. Попробую. Спасибо
Никак, вроде уже раз 10 сказали.
а как ты себе это представляешь схематически? std::any a = std::string("hello"); int d = a; ?
Схематически представлял себе вроде этого std::any = ClassA(); std::invoke(decltype(any.type()::Method), args....)
не хочешь классический полиморфизм использоваться для данной задачи в виде базового класса и виртуальных методов?
Ага, такой type() называется vtbl и уже реализован: в языке через виртуальные методы, в std::function, в std::variant... Наверное, где-то ещё
У меня два класса которые делают одно и тоже по сути, но имеют совершенно разные интерфейсы. Разные возвращаемые значения у методов, разные методы. Хочется иметь возможность неявно вызывать метод, в зависимости от лежащего внутри типа, и далее передавать этот объект в компоненты которые их используют, чтобы каждая компонента дальше этот объект кастила в то, что ей нужно и использовала как конкретный объект. Но мне тут вроде обьяснили что первая часть невозможна
паттерн Command знаешь?
визитор не пойдет?
Посмотрю. Его не помню
Это тоже посмотрю. Спасибо.
Обсуждают сегодня