Повышение броска:: shared_array <символ> для повышения:: shared_array <символ константы>

Для самого GUI:

PyQT является в значительной степени ссылкой.

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

Плюс, если Вы идете для опции Tkinter, предложенной lubos hasko Вы, может хотеть попробовать portablepy для имения выполнения приложения на среде Windows без Python.

6
задан Joakim Karlsson 4 December 2009 в 12:27
поделиться

6 ответов

Поскольку shared_array не имеет метода add_ref , его можно эмулировать следующим образом:

struct MagicDeleter {
  MagicDeleter( boost::shared_array<char> ptr ) : ptr(ptr) {};
  template<typename T> void operator()(T*) {} 
protected:
  boost::shared_array<char> ptr;
};

...

boost::shared_array<char> orig_ptr( some_val );
boost::shared_array<const char> new_ptr( orig_ptr.get(), MagicDeleter(orig_ptr) );
6
ответ дан 8 December 2019 в 18:37
поделиться

Другие ответы верны, вы не можете и не должны.

Кроме того, вы уверены, что хотите boost :: shared_array , а не const boost :: shared_array ?

На практике это работает:

boost::shared_array<char> acz;
boost::shared_array<const char>& acz2 = reinterpret_cast< boost::shared_array<const char>& >(acz);

НО это плохая идея и работает только в том случае, если boost :: shared_array и boost :: shared_array имеют одинаковую реализацию. Шаблоны могут быть частично специализированными:

template<class T>
struct TwoImplementations {
    int m_nIntMember;
};

template<>
struct TwoImplementations< const T > {
    double m_fDoubleMember;
};

Выполнение переинтерпретации приведения между TwoImplementations и TwoImplementations просто неправильно.

3
ответ дан 8 December 2019 в 18:37
поделиться

Вы не можете.

Поскольку оба типа основаны на шаблоне, оба типа полностью различны для компилятора.

1
ответ дан 8 December 2019 в 18:37
поделиться

Я думаю, что вы не можете. Если вам это действительно нужно, вы можете создать собственный класс интеллектуального указателя. Подсказки для этого можно найти здесь .

1
ответ дан 8 December 2019 в 18:37
поделиться

Вы можете использовать метод get () для получения базового char *, который автоматически преобразуется в const char *, но не назначайте его другому shared_array, потому что тогда у вас будет данные удалялись дважды. Просто используйте его по мере необходимости.

вот так:

boost::shared_array<char> x(new int[13]);
const char *y = x.get();
1
ответ дан 8 December 2019 в 18:37
поделиться

Такое преобразование, генерируемое компилятором, невозможно.

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

Более того, использование такой функции иногда является фоном для проверок во время компиляции, которые могут просто не позволить создание экземпляра ] Тип для каждого случая, когда тип A правильный.

0
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

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