Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071

Создать map без указания типа

13.03.2021, 13:14. Показов 3991. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как я могу создать map<string, auto>?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2021, 13:14
Ответы с готовыми решениями:

Можно ли заменить обращение к Union без указания типа переменной?
Можно ли заменить обращение к Union без указания типа переменной?(т.е. без .i .f .str, а просто к &quot;data&quot;) #include...

О структурах. Как в массив записываются элементы разных типов без указания собственно типа?
Имеется следующая программа #include &quot;stdafx.h&quot;; #include &lt;iostream&gt; #include &lt;string&gt; struct Alphabet { int i; char c;...

Создать экземпляр класса без явного указания членов класса
Если у меня есть два конструктора, один из которых по умолчанию, а второй явный. Я почему-то не могу создать экземпляр класса без явного...

34
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
13.03.2021, 15:09
Студворк — интернет-сервис помощи студентам
Hyppoprogramm, смотри описание функции std::visit
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
13.03.2021, 15:24  [ТС]
Алексей1153, так не работает:
C++
1
std::visit([](auto&& arg) { arg.mymethod() }, mymap["myobject"]);
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
13.03.2021, 15:31
Hyppoprogramm, перемещение пробрасывающую ссылку тут не нужно, сделай просто ссылку auto&

mymethod() - если тип не рассматривается, то этот метод должен быть у всех перечисленных типов.
ну и точка с запятой пропущена после метода

Либо смотри, как в примере используется if constexpr
1
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
13.03.2021, 15:41  [ТС]
А как я могу преобразовать std::any в функцию, чтобы вызвать её?
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
13.03.2021, 15:44
Hyppoprogramm, не понял вопрос
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
13.03.2021, 15:46  [ТС]
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
class ABC {
private:
    std::any callable_or_other;
public:
    ABC (std::any obj) {
        callable_or_other = obj;
    }
    method () {
        callable_or_other();
    }
}
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
13.03.2021, 15:58
Hyppoprogramm, я не пользовался std::any. Попробовал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <any>
 
int main(void)
{
    struct A
    {
        void func()
        {
            std::cout<<'A'<<'\n';
        }
    };
    
    struct B
    {
        void func()
        {
            std::cout<<'B'<<'\n';
        }
    };
    
    
    std::any o=A{};
    std::any_cast<A>(o).func();
    
    o=B{};
    std::any_cast<B>(o).func();
}
если объект внутри не того класса, то будет исключение. Для определения типа можно вызвать o.type, насколько я понимаю
1
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
13.03.2021, 16:03  [ТС]
Алексей1153, мне надо кастить именно к простой c++ функции

Добавлено через 2 минуты
Тобишь к functional std::function
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
13.03.2021, 16:08
Hyppoprogramm, что-то мне подсказывает, что не тем путём двигаешься )) Так значением в мапе будут объекты или функторы? Может, вообще всё не так нужно сделать? Какая задача то ?

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
....
    auto c=[]()
    {
        std::cout<<'C'<<'\n';
    };
    
    o=c;
    std::any_cast<decltype(c)>(o)();
....
но тип всё равно нужен
1
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
13.03.2021, 16:09  [ТС]
Алексей1153, нет, просто вопрос с первым map я решил, а со вторым - нет.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
14.03.2021, 14:20  [ТС]
Алексей1153, последний вопрос: как узнать тип того, что лежит в std::variant?

Добавлено через 13 минут
Узнал.

Добавлено через 9 минут
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Hyppoprogramm, смотри описание функции std::visit
Алексей1153, посмотрел в Интернете, это не совсем то что мне нужно. Я решил сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <variant>
#include <string>
 
int main() {
    std::variant<int, std::string> v;
    v = 3; // variant = int
    int intval; // числовое значение
    std::string strval; // строковое значение
    int type = 0; // 1 - int, 2 - string
    if (std::holds_alternative<int>(v)) {
        type = 1;
        intval = std::get<int>(v);
    } else if (std::holds_alternative<std::string>(v)) {
        type = 2;
        strval = std::get<std::string>(v);
    }
    // Действия со значением variant
    switch (type) {
        case (1):
            // Действия с числом (intval)
            break;
        case (2):
            // Действия со строкой (strval)
    }
    return 0;
}
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
14.03.2021, 15:24
Hyppoprogramm,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <variant>
#include <string>
 
int main()
{
    std::variant<int, std::string> v;
    v = 3; // variant = int
    
    std::visit([](auto& value)
    {
        using T=std::decay_t<decltype(value)>;
        
        if constexpr(std::is_same_v<int,T>)
        {
            value=1;
        }
        else if constexpr(std::is_same_v<std::string,T>)
        {
            value="1";
        }
    },v);
 
    return 0;
}
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
14.03.2021, 15:29  [ТС]
Алексей1153, у меня появился отдельный вопрос, но он практически по той же теме. Помогите пожалуйста!
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
14.03.2021, 15:33
Hyppoprogramm, так вроде там уже подсказали )
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
14.03.2021, 15:45  [ТС]
Да, уже да)

Добавлено через 15 секунд
Но у меня есть ещё много вопросов впереди...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2021, 15:45

Отловить CN_UPDATE_COMMAND_UI без указания события в message map (MFC)
Добрый день! Создаю меню через код. Если бы мне нужно было добавить какие то определенные пункты, для которых я могу заранее сделать...

Можно ли передать переменную в класс без указания ее типа
Есть универсальный класс. С дофига и более функциями. И при работе с классом приходится постоянно писать типы переменных в &lt;&gt; ...

создать переменную типа map
Студия 2008, надо как-то объявить переменную типа map&lt;string,string&gt; , в идеале map&lt;string,map&gt;. В консоли только писал, не знаю куда...

Указания типа коллекции
Чем строка List&lt;Person&gt; listOfPersons = new ArrayList&lt;&gt;(); Отличается от List&lt;Person&gt; listOfPersons = new...

Создать файл без типа
Создать файл, компоненты (&lt;=7) которого являются натуральными числами. На основе этого файла создать два новых файла, в первом разместить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru