Как анимировать пространство графика CorePlot с помощью UIScrollView?

Подтверждено использование двух одноименных переменных среды:

VIRTUALENVWRAPPER_PYTHON - какая версия Python используется самой утилитой virtualenvwrapper. Другими словами, какая версия Python выполняет virtualenvwrapper, как если бы эта версия Python была явно названа в строке #! файла сценария virtualenvwrapper.

VIRTUALENV_PYTHON - какая версия Python будет установлена ​​virtualenv при создании новой виртуальной среды. Эквивалент опции -p / --python в командной строке virtualenv.

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

См. https://stackoverflow.com/a/24724360/763269 , чтобы узнать, как обновить Python в virtualenv.

24
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Во-первых: ваш класс Foo действительно очень плохое приближение std :: string. Я предсказываю много утечек памяти. (Ищите «правило трех».)

Второе: указатель не может быть неявно преобразован в объект unique_ptr (по соображениям безопасности). Но шаблонный конструктор пар требует, чтобы аргументы были неявно преобразованы в соответствующие типы значений. GCC, кажется, позволяет это, но это ошибка. Вы должны создать объект unique_ptr вручную. К сожалению, в черновике C ++ 0x отсутствует следующий очень полезный шаблон функции, который облегчает создание временных объектов unique_ptr. Он также безопасен для исключений:

template<class T, class...Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    std::unique_ptr<T> ret (new T(std::forward<Args>(args)...));
    return ret;
}

Кроме того, давайте использовать новую функцию emplace вместо insert :

auto a = bar.emplace(1,make_unique<Foo>("one"));

emplace передает оба аргумента соответствующему парному конструктору.

Фактическая проблема, с которой вы столкнулись, заключается в том, что конструктор пары попытался скопировать unique_ptr, даже если такой объект является «подвижным». Похоже, что поддержка GCC в C ++ 0x еще недостаточно хороша для правильной обработки этой ситуации. Из того, что я могу сказать, моя строка сверху должна работать в соответствии с текущим стандартным проектом (N3126).

Редактировать: Я только что попробовал следующее как обходной путь, используя GCC 4.5.1 в экспериментальном режиме C ++ 0x:

map<int,unique_ptr<int> > themap;
themap[42].reset(new int(1729));

Это также должно работать в следующем стандарт, но GCC также отвергает его. Похоже, вам нужно подождать, пока GCC поддержит unique_ptr в картах и ​​мультикартах.

27
ответ дан 28 November 2019 в 23:54
поделиться

Я только что повозился с unique_ptr в gcc 4.6.0. Вот некоторый (очень некрасивый) код, который работает правильно:

std::map<int, std::unique_ptr<int> > table;
table.insert(std::pair<int, std::unique_ptr<int>>(15, std::unique_ptr<int>(new int(42))));
table[2] = std::move(table[15]);
for (auto& i : table)
{
    if (i.second.get())
        printf("%d\n", *i.second);
    else
    {
        printf("empty\n");
        i.second.reset(new int(12));
    }
}
printf("%d\n", *table[15]);

Вывод 42, пустой, 12 - так что, очевидно, он работает. Насколько я могу судить, единственная «проблема» - это ужасно выглядящая команда вставки. emplace не реализован в gcc 4.6.0

1
ответ дан 28 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

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