CAPL: Как иметь одно и то же имя члена перечисления в разных перечислениях?

Я хочу сделать так, чтобы одно и то же имя члена перечисления можно было использовать в разных перечислениях, например:

enum OPTION_1
{
    ACTIVATED   = 1,
    DEACTIVATED = 0
};

enum OPTION_2
{
    ACTIVATED   = 1,
    OFF         = 0
};

Когда я пытаюсь скомпилировать это, я получаю сообщение об ошибке: Повторяющееся имя перечислителя "АКТИВИРОВАН".

Я нашел аналогичный вопрос, но для языка C ++ c ++ как иметь одно и то же имя членов перечисления в разных именах перечисления без ошибок: переопределение; предыдущее определение было "перечислитель"

Я пробовал показанные там решения, но не смог реализовать их в CAPL. Мой вопрос в том, могу ли я иметь перечисления с разными именами, но с одинаковыми именами членов; Если возможно, как это можно реализовать в CAPL?


person Lares    schedule 11.06.2018    source источник


Ответы (1)


Есть обходной путь, который действительно уродлив, никаких рекомендаций делать это.

В CANoe вы можете определять собственные таблицы значений для системных переменных, которые на самом деле являются перечислениями, и нет ограничений для одинаковых имен членов.

Редактор таблицы значений для CANoe-sysvar

А затем вы можете повторно использовать эти перечисления в CAPL-коде:

variables{
  enum VtSv_foo_myEnum1 var1;
  enum VtSv_myEnum2 var2;
}

do_foo(){
  var1 = (enum VtSv_foo_myEnum1) sysvar::foo::myEnum1::One;
  var2 = (enum VtSv_myEnum2) sysvar::myEnum2::One;  
}

Прежде чем начать использовать это, просто спросите себя, в чем выгода? Потому что код будет выглядеть очень запутанным.

И вы можете найти больше в справке CANoe:

Введение в CAPL »Основы» Типы перечисления

person An Other    schedule 27.06.2018