Список инициализатора *аргумент* порядок оценки

Сначала Вам нужен файл на Вашем приложении домашний веб-сайт с последней версией. Лучшим способом я думаю, чтобы иметь специальную таблицу SQL для этой задачи и заполнить его автоматически после публикации новой версии / ночью создают завершение. Ваше приложение создает новый поток, который запрашивает встроенную ссылку http с версией и соответствует в току. В.NET использование может использовать код как это:

Version GetLatestVersion() {
HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(new Uri(new Uri(http://example.net), "version.txt));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (request.HaveResponse)
{
  StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.Default);
  return new Version(stream.ReadLine());
}
else
{
  return null;
}
}

Version latest = GetLatestVersion();
Version current = new Version(Application.ProductVersion);
if (current < latest)
{
  // you need an update
}
else
{
  // you are up-to-date
}

В этом примере, version.php только в одной плоскости представляют в виде строки как 1.0.1.0.

Другая подсказка я могу дать - как загрузить обновление. Мне нравится очень много следующей идеи: в ресурсах Вашего приложения существует строка кода CLR, который Вы компилируете на лету (использующий CodeDom) к временной папке, главное приложение называет его и переходит к завершению. Updater читает аргументы, настройки или реестр и загружает новые модули. И главное приложение вызовов, которое удаляет все временные файлы.Договорились!

(Но все здесь о.NET)

12
задан Phil Miller 25 June 2014 в 01:45
поделиться

1 ответ

C++ Standard 12.6.2/3:

There is a sequence point (1.9) after the initialization of each base and member. The expression-list of a mem-initializer is evaluated as part of the initialization of the corresponding base or member.

The order of the initialization is the one you specified in the question. Evaluation is part of this initialization, and the initializations can't interleave (because there is a sequence point between them).

That means that the function calls in your initializer lists are not called in the desired order, but in the order in which the member declarations appear.

21
ответ дан 2 December 2019 в 07:22
поделиться
Другие вопросы по тегам:

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