Не могу установить Ubuntu с 10.10

Проблема

C ++ включает полезные общие функции, такие как std::for_each и std::transform, что может быть очень удобно. К сожалению, они также могут быть довольно громоздкими в использовании, особенно если functor , который вы хотите применить, уникален для конкретной функции.

#include 
#include 

namespace {
  struct f {
    void operator()(int) {
      // do something
    }
  };
}

void func(std::vector& v) {
  f f;
  std::for_each(v.begin(), v.end(), f);
}

Если вы используете только f один раз и в этом конкретном месте кажется излишним писать целый класс, просто чтобы сделать что-то тривиальное и одно.

В C ++ 03 у вас может возникнуть соблазн написать что-то вроде следующего, чтобы сохранить functor local:

void func2(std::vector& v) {
  struct {
    void operator()(int) {
       // do something
    }
  } f;
  std::for_each(v.begin(), v.end(), f);
}

однако это недопустимо, f не может быть передано функции template в C ++ 03.

новое решение

C ++ 11 вводит lambdas, чтобы вы могли написать встроенный анонимный функтор для замены struct f. Для небольших простых примеров это может быть более чистым для чтения (он хранит все в одном месте) и потенциально проще поддерживать, например, в простейшей форме:

void func3(std::vector& v) {
  std::for_each(v.begin(), v.end(), [](int) { /* do something here*/ });
}

Лямбда-функции - это просто синтаксический сахар для анонимных функторов .

Типы возвращаемых данных

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

void func4(std::vector& v) {
  std::transform(v.begin(), v.end(), v.begin(),
                 [](double d) { return d < 0.00001 ? 0 : d; }
                 );
}

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

void func4(std::vector& v) {
    std::transform(v.begin(), v.end(), v.begin(),
        [](double d) {
            if (d < 0.0001) {
                return 0;
            } else {
                return d;
            }
        });
}

Чтобы разрешить это, вам разрешено явно указывать тип возврата для лямбда-функции, используя -> T:

void func4(std::vector& v) {
    std::transform(v.begin(), v.end(), v.begin(),
        [](double d) -> double {
            if (d < 0.0001) {
                return 0;
            } else {
                return d;
            }
        });
}

«Захват» переменных

До сих пор мы не использовали ничего, кроме того, что было передано лямбда внутри него, но мы также можем использовать другие переменные, в пределах лямбда. Если вы хотите получить доступ к другим переменным, вы можете использовать предложение capture ([] выражения), которое до сих пор не использовалось в этих примерах, например:

void func5(std::vector& v, const double& epsilon) {
    std::transform(v.begin(), v.end(), v.begin(),
        [epsilon](double d) -> double {
            if (d < epsilon) {
                return 0;
            } else {
                return d;
            }
        });
}

Вы можете выполнять захват обоими ссылку и значение, которые вы можете указать с помощью & и = соответственно:

  • [&epsilon] захват по ссылке
  • [&] захватывает все переменные, используемые в lambda по ссылке
  • [=] фиксирует все переменные, используемые в лямбда по значению
  • [&, epsilon] захватывает переменные, такие как [& amp;], но epsilon по значению
  • [=, &epsilon] захватывает переменные, такие как [=], но epsilon по ссылке

Порожденный operator() по умолчанию const, с импликацией, которая захватывает, будет const когда вы обращаетесь к ним по умолчанию. Это приводит к тому, что каждый вызов с одним и тем же входом даст тот же результат, однако вы можете пометить лямбда как mutable , чтобы запросить, что созданный operator() не const.

7
задан Michael Burr 27 September 2008 в 08:29
поделиться

5 ответов

wxWidgets не встроен в применимые библиотеки, когда Вы "устанавливаете" wxMSW установщик. Это вызвано тем, что существует столько настраиваемых элементов, который является точно, для чего setup.h, к которому Вы обращаетесь.

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

  1. Запускают "Командную строку Visual Studio". Вы найдете это в меню "Пуск" под "Microsoft Visual Studio-> Инструменты Visual Studio".

  2. Изменение в папке: [Корень WXWIN] настройка отладочного процесса значения по умолчанию Сборки \build\msw

  3. : nmake -f makefile.vc BUILD=debug

  4. значение по умолчанию Сборки выпускают конфигурацию: nmake -f makefile.vc BUILD=release

  5. Удостоверяются, что DLLs находятся в Вашем ПУТИ. Они будут найдены в [корень WXWIN] \lib\vc_dll

  6. Под упомянутой выше папкой DLL, Вы найдете подпапки для каждого варианта сборки (Инструкции выше сделали два, отладка и выпуск.) В каждой различной папке Вы найдете 'wx' папку, содержащую 'setup.h" файл. Вы будете видеть, что setup.h файлы на самом деле отличаются для каждого варианта сборки. Это папки, которые необходимо добавить к конфигурации сборки проекта, включают путь, один на вариант сборки. Так, например, Вы добавили бы [корень WXWIN] \lib\vc_dll\mswud к включать пути для Вашей отладочной сборки, [корень WXWIN] \lib\vc_dll\mswu для Вашей сборки конечных версий.

  7. возможно создать много других различных комбинаций: статичный освобождает, монолитная единственная библиотека, не-Unicode, и т.д. Посмотрите [корень WXWIN] \docs\msw\install.txt для намного более обширных инструкций.

21
ответ дан kbluck 27 September 2008 в 08:29
поделиться

Когда Вы загружаетесь с живого CD, нажимают и удерживают левое Сдвиг ключ. Это, выбрав язык, введет меню Grub:

enter image description here

F6 Нажатия в его экране и выборе "nomodeset" как параметр загрузки для предотвращения загрузки видеодрайверов во время начальной загрузки.

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

В случае, если Вы не сможете загрузиться в графический рабочий стол, можно попытаться установить графические драйверы Nvidia от терминала, например, с текст жокея .

Дополнительное примечание из комментария: после успешной установки мы можем загружаться к "Режим Восстановления" (снова содержат оставленный Сдвиг ключ для меню Grub) устанавливать графические драйверы, или если это приводит спад к сбою до оболочки для продолжения установки драйвера из командной строки.

6
ответ дан Community 22 October 2019 в 14:52
поделиться

Вероятно, необходимо создать wxWidgets. Существует шаг постсборки в wxWidgets процессе сборки, который копирует соответствующий setup.h в C:\wxWidgets_install_dir\include\wx.

2
ответ дан eglaser 27 September 2008 в 08:29
поделиться
  1. Нажатие любой ключ перед экраном приветствия установки Ubuntu (для открытия "Ubuntu CD Усовершенствованные Опции Страницы приветствия" .

  2. Нажимают F6 и выбирают опция nomodeset и заканчивают установку.

  3. Содержат сдвиг ключ при начальной загрузке от новой установки (для доступа к опциям GRUB) и выбирают режим восстановления в опциях GRUB.

  4. Используя режим восстановления, включите доступ в Интернет и откройте корневую консоль для выполнения, это управляет:

    sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
    sudo apt-get update
    sudo apt-get install nvidia-current 
    exit
0
ответ дан Italo Borssatto 22 October 2019 в 14:52
поделиться

Вы говорите CD.. 12.04 не будет соответствовать на CD. Где и как Вы делали свой диск установки? Если это - загруженная попытка ISO, записывающая его к DVD. Средство записи CD Windows, как известно, является багги.

0
ответ дан barrydrake 22 October 2019 в 14:52
поделиться
Другие вопросы по тегам:

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