154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
1

Как результат функции конвертировать в тип Enum?

24.03.2015, 11:15. Показов 4425. Ответов 20
Метки нет (Все метки)

Кто может подсказать как мне результат функции конвертировать в тип Enum, тоесть чтобы результат функции сравнивало со значениями в этом типе Enum и выводило его номер, вместо названия. Функция возвращает std::string.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2015, 11:15
Ответы с готовыми решениями:

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве...

Как сделать тип enum в структуре беззнаковым
Почему элемент Type структуры BracketBlock signed и как его сделать unsigned, не увеличивая...

Как конвертировать тип класса в string?
Как конвертировать тип класса в string?

Как мне конвертировать адрес указателя (например 00A88B68) в тип string ? C++
вопрос в имени темы

20
Заблокирован
24.03.2015, 11:39 2
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Функция возвращает std::string.
сделай, чтоб она возвращала enum
В чём проблема?

Ну или показывай код функции и своего чудо enum - а
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.03.2015, 11:45 3
В плюсах нет рефлексии, а стало быть и возможности получения enum'а по его имени.
0
2756 / 1910 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
24.03.2015, 11:57 4
C++
1
2
3
enum my_enum{one,two,three};
std::map<std::string,my_enum>convert{{"one",one},{"two",two},{"three",three}};
my_enum test=convert["three"];
0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 12:19  [ТС] 5
error C2039: 'map' : is not a member of 'std'
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Ошибки
0
3811 / 3118 / 866
Регистрация: 25.03.2012
Сообщений: 11,520
Записей в блоге: 1
24.03.2015, 12:36 6
Игорь1986, а предварительно изучить, что такое std::map перед тем как использовать не пробовал?
http://www.cplusplus.com/reference/map/map/
0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 12:40  [ТС] 7
Изучал и подключил map но ошибки остались последние 3
0
2756 / 1910 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
24.03.2015, 12:46 8
Цитата Сообщение от Игорь1986 Посмотреть сообщение
error C2039: 'map' : is not a member of 'std'
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Ошибки
А так (без C++11 стиля инициализации)?
C++
1
2
3
4
5
6
7
8
9
10
11
#include<map>
int main()
{
    enum my_enum{one,two,three};
    std::map<std::string,my_enum>convert;
    convert["one"]=one;
    convert["two"]=two;
    convert["three"]=three;
    my_enum test=convert["three"];
    return 0;
}
0
Заблокирован
24.03.2015, 13:11 9
ТС, ну ты чЯго? Я же тебе написал, сделай так, что функция возвращала твой enum, в чём трудность - то ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum HYPER_ENUM
{
    ONE = 0,
    TWO = 1,
    THREE = 2
};
 
HYPER_ENUM ReturnSomeShit(int enumNum)
{
    return (HYPER_ENUM)enumNum;
}
 
int main(int argc, char *argv[])
{
    if(ReturnSomeShit(1) == TWO)
        int y= 1;
1
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 13:24  [ТС] 10
Затмение у нас)))
0
sourcerer
24.03.2015, 14:15
  #11

Не по теме:

Цитата Сообщение от Aston Martin Посмотреть сообщение
ReturnSomeShit
:rofl:

0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 14:26  [ТС] 12
C++
1
2
3
4
5
6
7
enum my_enum{one,two,three};
    std::map<std::string,my_enum>convert;
    convert["one"]=one;
    convert["two"]=two;
    convert["three"]=three;
    my_enum test=convert["three"];
    return 0;
вроде как все понятно, но если я хочу вернуть из своей функции это значение, тоесть вместо return 0;, вставлю
return test; то выводит пустую строку
0
Заблокирован
24.03.2015, 14:37 13

Да покажи код уже свой чудесный, сразу всё поправим как надо
0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 14:43  [ТС] 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum DOTypes{
        BOOLEAN=1,
        INT8, 
        INT16, 
        INT24,
        INT32, 
        INT128, 
        INT8U, 
        INT16U, 
        INT24U,
        INT32U, 
        FLOAT32,  
        FLOAT64,
};
теперь функция
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
std::string Parse::Section(const char * path,const std::string & IDType,const std::string & Namefc,const std::string & NameDA)
{
    std::string TypeDONode;
    try
    {
        FFilePath = path; // remember path
        TiXmlDocument doc(path);
        if (!doc.LoadFile(TIXML_ENCODING_UTF8)) 
        {
            return "File don't load!";
        }
        else
        {
            TiXmlHandle handleDoc(&doc);
            TiXmlElement * pElement;
            pElement = handleDoc.FirstChildElement("SCL").ToElement();
            TiXmlElement *DataType=pElement->FirstChildElement("DataTypeTemplates");
            if(DataType)
            {
                TiXmlElement* DOType = DataType->FirstChildElement("DOType");
                if (DOType)
                {
                    for (TiXmlElement * iterDOType = DOType; iterDOType; iterDOType = iterDOType->NextSiblingElement("DOType"))
                    {
                        if(iterDOType->Attribute("id")==IDType)
                        {
                            TiXmlElement *DA=iterDOType->FirstChildElement("DA");
                            if(DA)
                            {
                        for (TiXmlElement * iterDA = DA; iterDA; iterDA = iterDA>NextSiblingElement("DA")) 
                                {
                            if((iterDA->Attribute("name")==NameDA)&&(iterDA->Attribute("fc")==Namefc))
                                    TypeDONode =iterDA->Attribute("bType");
                                }//end for iterDA
                            }//end if DO
                        }//end if compare
                    }//end for iterLNodeType
                }//end if LNodeType
            }//end if DataType
        }// end else
        return TypeDONode;
    }//end try
    catch (...)
    {
        return "Other exception!";
    }
}
вот в этой строке находится мое строковое значение которое необходимо заменить цифрой из энама
TypeDONode =iterDA->Attribute("bType");
тоесть если значение BOOLEAN то вывести 1 ну и так далее по списку
0
Заблокирован
24.03.2015, 14:54 15

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
ReturnSomeShit
Судя по куче гавна кода выше, тут больше подойдёт: ReturnPackOfBullShit()



ТС, я никак не могу понять, в чём твоя проблема? Ты считал из XML-я какую - то строку типа "INT128" и хочешь, чтоб эта строка волшебным образом превратилась во что - то из твоего enum-а, ну например в INT128 ?
0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 14:58  [ТС] 16
Почти допустим превратилась не в INT128, а его номер в энаме тоесть 6
0
Заблокирован
24.03.2015, 15:04 17
Ну так напиши функцию конвертор:

Вот превращение в сам enum:
C++
1
2
3
4
5
6
7
8
DOTypes ConvertStringToDOType(std::string typeName)
{
    if(typeName == "INT128")
        return INT128;
    else if(typeName == "FLOAT64")
        return FLOAT64;
    //else if ... и тд
}
Вот в порядковый номер:
C++
1
2
3
4
5
6
7
8
int ConvertStringToDOType(std::string typeName)
{
    if(typeName == "INT128")
        return (int)INT128;
    else if(typeName == "FLOAT64")
        return (int)FLOAT64;
    //else if ... и тд
}
0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 15:06  [ТС] 18
Я уже понял что проще с case работать
0
Заблокирован
24.03.2015, 15:11 19
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Я уже понял что проще с case работать
А ты думал, что строка может автоматический сконвертироваться в название enum-а, которое ты в коде написал?
Для этого обычно наворачивают мета систему, вот Qt допустим такое и много другое возможно
Так что выкинул бы давно своё WinApi и реджойнулся бы на кроссплатформенное мега Qt
0
154 / 141 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 15:12  [ТС] 20
Наивный
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2015, 15:12
Помогаю со студенческими работами здесь

Тип enum и нумерация
Всем здрасьте ! У меня есть тип enum, который описывает что-то: enum NUM { X1, X2, X3, ...} ...

Заголовочный файл и тип enum
Задание состоит в том, что надо программу разбить на три части: заголовочный файл Factor.h, у...

Перечисляемый тип enum + switch
Всем привет, прошу помочь разобраться, делаю структуры и все никак не могу сделать так , чтобы...

Перечислимый тип enum ,что это?
Не пойму зачем он нужен,если все равно он возвращает целые числа? Как обращаться именно к...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru