как использовать strcat с ENUM? - PullRequest
0 голосов
/ 29 марта 2011

У меня есть внешний инструмент, который генерирует ENUM на основе пользовательских данных. Теперь этот ENUM используется моим кодом C ++, где мне нужно выбрать конкретный ENUM на основе переменной, скажем «x». Сгенерированные ENUMS имеют форму 'ENUM_1', 'ENUM_2', 'ENUM_3' .... и так далее. Теперь я хочу, чтобы код внутри моего кода был таким, чтобы соответствующий ENUM выбирался на основе 'x'. Я пытался использовать функцию strcat, как:

typedef enum ( enum_1, enum_2, enum_3...enum_n) map1;

y=(map1)strcat("enum_", x);

но выдает ошибку "Невозможно преобразовать из char * в map1.

Может кто-нибудь предложить способ достижения этого.

ThankYou

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Вы не можете сделать это. Ну, ты не можешь сделать это таким образом ...

Перечисления не оцениваются по имени во время компиляции. Вам придется что-то попробовать с препроцессором. Вы можете создать определение, чтобы сделать что-то подобное. Что-то вроде:

#define fn(x) enum_##x

А затем позвоните

fn(x)

Но это происходит, когда файл предварительно обрабатывается. Таким образом, вы не можете получить доступ к переменным времени выполнения. Судя по вашему коду, я не думаю, что вы сможете делать то, что хотите. Удачи все же.

1 голос
/ 29 марта 2011

Вы не можете сделать это, используя strcat. Из описания я понимаю, что вы хотите конвертировать x в map1. Чтобы достичь этого, вы можете сделать map1 m = (map1)(x-1); См. Этот пример кода:

typedef enum { enum_1, enum_2, enum_3} map1;

int main()
{
    int x = 1;
    map1 m = (map1)(x-1);
}

-1 требуется, поскольку целочисленное значение перечислений в map1 начинается с 0.

0 голосов
/ 29 марта 2011

Теперь я хочу, чтобы код внутри моего кода был таким, чтобы соответствующий ENUM выбирался на основе 'x'.

Перечисленные значения константы и основаны наоператор Я предполагаю, что x является целочисленным типом данных.

y=(map1)strcat("enum_", x);

strcat (..) передаваемые параметры должны иметь тип char*.И очевидно, что x не относится к типу char* на основании предыдущего утверждения.Непонятно, почему вы используете strcat для выполнения этой задачи.

Ответ для вашей темы: Нет. Вы не можете использовать strcat с перечисленными значениями.

...