Надлежащая замена для пропавших без вести 'наконец' в C++

Другой вариант - Google Data Studio. Data Studio - это инструмент бизнес-аналитики Google Cloud Platform. Вы можете подключить набор данных BigQuery к DataStudio и создать панель мониторинга с фильтрами, пользовательскими метриками и т. Д. Затем вы можете опубликовать эту панель и поделиться ею с заинтересованными сторонами. Права на акции действуют так же, как документы в Google, листы, слайды и т. Д.

Следует иметь в виду, что DataStudio выполняет SQL-запросы за кулисами в вашем наборе данных BigQuery. Это означает, что с вас взимается плата за каждую визуализацию, поэтому убедитесь, что вы знаете о затратах на запрос отчета. Один из способов справиться с этим - создать агрегированные таблицы и подключить их к DataStudio.

Удачи! Data Studio - отличный инструмент!

11
задан rlerallut 24 November 2008 в 10:59
поделиться

6 ответов

Вместо определения struct Finally, Вы могли извлечь свой код очистки в функции класса Task и используйте ScopeGuard Loki.

ScopeGuard guard = MakeGuard(&Task::cleanup, task);

См. также статью этого DrDobb и эту другую статью для больше о ScopeGuards.

16
ответ дан 3 December 2019 в 02:31
поделиться

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

Например, функциональное нечто () ответственно за непротиворечивость Объекта задачи, это редко - хорошая идея, методы Задачи сами должны быть ответственны за установку состояния к чему-то разумному.

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

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

9
ответ дан 3 December 2019 в 02:31
поделиться

Я обычно использую что-то больше как это:

class Runner {
private:
  Task & task;
  State oldstate;
public:
  Runner (Task &t, State newstate) : task(t), oldstate(t.status); 
  {
    task.status = newstate;
  };

  ~Runner() 
  {
    task.status = oldstate;
  };
};

void foo() 
{
  Task* task;
  while (task = nextTask())
  {
    Runner r(*task, running);
            // ...code that might throw an exception...
  }
}
2
ответ дан 3 December 2019 в 02:31
поделиться

Это - такой ужасный способ сделать его: (Вы происходите из Java?)

Прочитайте эту статью:
C++ поддерживает 'наконец' блоки? (И каков этот 'RAII', о котором я продолжаю слышать?)

Это объясняет, почему наконец такое ужасное понятие и почему RIAA намного более изящен.

6
ответ дан 3 December 2019 в 02:31
поделиться

Как другие сказали, "решением" является лучшее разделение проблем. В Вашем случае, почему переменная задачи не может заботиться о чистке после себя? Если какая-либо очистка должна быть сделана на нем, то это не должен быть указатель, но объект RAII.

void foo() {
//    Task* task;
ScopedTask task; // Some type which internally stores a Task*, but also contains a destructor for RAII cleanup
    while (task = nextTask()) {
        task->status = running;
        // ...code that might throw an exception...
    }
}

Интеллектуальные указатели могут быть тем, в чем Вы нуждаетесь в этом случае (повышение:: shared_ptr удалит указатель по умолчанию, но можно указать пользовательские функции средства удаления вместо этого, которые могут выполнить произвольную очистку takss вместо этого. Для RAII на указателях это обычно, что Вы захотите.

Проблемой не является отсутствие наконец ключевое слово, случается так использованием необработанных указателей которые не могут реализовать RAII.

Но обычно, каждый тип должен знать, как вымыться после себя. Не после каждого объекта, которые были в объеме, когда исключение было выдано (который является тем, что наконец делает, и что Вы пытались сделать), сразу после себя. И если каждый объект делает это, то Вам не нужно большое вместилище, "моются после каждого объекта в объеме" функция вообще.

1
ответ дан 3 December 2019 в 02:31
поделиться

Я приехал в C++ от Delphi, таким образом, я знаю то, о чем я говорю. Я НЕНАВИЖУ наконец!!! Это ужасно. Я действительно не думаю, что C++ отсутствует наконец.

-2
ответ дан 3 December 2019 в 02:31
поделиться
Другие вопросы по тегам:

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