2015-09-23 3 views
-4

Я хочу переопределить = ~ оператор в C++.
Есть ли способ сделать это.Override = ~ operator in C++

При попытке оператора = ~ (..)

компилятор дает ошибку

ошибка: ожидается инициализатор до того '~' лексем

Примечание: мне нужно разобрать выражение, как:

{аЬс == 123 & & PQR = ~} CB

= ~ Значение оператора - соответствие шаблона.

+3

Это фактически 2 оператора. –

+6

Нет такой вещи, как 'operator = ~'. Где вы это видели и что вы пытаетесь сделать? –

+0

Мне нужно разобрать некоторую строку, например {abc == def && pqr = ~ 123} –

ответ

3

C++ не имеет оператора =~. Только существующие операторы могут быть перегружены; вы не можете создавать свои собственные, как в Haskell или на других языках. То, чего вы просите достичь, невозможно.

+0

Есть ли способ разобрать этот тип строки с помощью C++ –

+0

Если вы хотите сопоставить образец, загляните в функцию 'std :: regex_match' в файле заголовка' '. Я никогда не работал с регулярными выражениями на C++, но это кажется хорошим местом для начала. – ApproachingDarknessFish

+0

Нет, сначала я должен определить оператор = ~ в строке ввода, а затем применить соответствие регулярного выражения. –

1

Нет такой вещи как = ~ operator. И нет такой вещи, как = x (x - любой другой оператор).

Вы не можете определить новые операторы в C++.

В вашем случае используйте оператор ~, а затем используйте назначения.

0

Вам необходимо использовать оператор, который уже существует. Нет способа [1] вводить новые комбинации существующих символов, и вы не можете использовать операторы, которые являются унарными (один аргумент), например operator~.

Предполагая, что входы что-то вроде строк, я бы сказал, что operator% или operator^ потенциально будет работать. Таким образом, вы получаете if (abc == 123 && pqr % cb) ....

Это может быть реализовано с помощью:

bool operator%(std::string a, std::string b) 
{ 
    return isMatch(a, b); 
} 

[1] Помимо изменения исходного кода компилятора, а так как этот тип изменений никогда не будет сделано в основной компилятор, вы должны поддерживать такое изменение на вашей собственной ветке компилятора навсегда. И это, конечно же, предполагает, что вы даже имеете исходный код компилятора, что не подходит для ВСЕХ компиляторов.