Как получить текущий идентификатор контракта при осуществлении выбора

typedef typename Tail::inUnion dummy;

Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.

template  struct Contains;

template 
struct Contains >
{
    enum { result = Contains::result };
};

template 
struct Contains >
{
    enum { result = true };
};

template 
struct Contains
{
    enum { result = false };
};

PS: Посмотрите на Boost :: Variant

PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design

2
задан AS Mackay 3 April 2019 в 08:58
поделиться

1 ответ

Неявное self переменная на самом деле видимо в рамках всего выбора, не используя или иначе. Как указано, хотя, в настоящее время это не представляет ценности в выборе потребления, потому что поведение выбора потребления состоит в том, что экземпляр контракта, на котором осуществлен выбор, заархивирован перед казнью органа по выбору (то есть, семантика "предварительно использует"). В выпуске будущего набор аннотаций выбора расширится для включения preconsuming и postconsuming. В выборе постпотребления контракт, упомянутый self, останется активным всюду по органу по выбору и будет заархивирован в конце. Выбор, не аннотируемый preconsuming, noconsuming или postconsuming, примет значение по умолчанию к семантике перед потреблением (как это сегодня).

0
ответ дан Shayne Fletcher 21 April 2019 в 23:40
поделиться
  • 1
    Я получаю эту Запрещенную ошибку (маркерные пропавшие без вести CSRF или неправильный.): – Mar 10 April 2019 в 07:19
Другие вопросы по тегам:

Похожие вопросы: