Каково некоторое 'хорошее использование' примеры динамического кастинга?

для ubuntu 14.04, это как я его исправил.

установить зависимости, необходимые для OpenCV "

sudo apt-get удалить ffmpeg x264 libx264-dev

sudo apt-get update

sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-уродливый gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg

sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2. 0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer -plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip

sudo add-apt-repository ppa: mc3man / gstffmpeg-keep

sudo apt-g et update

sudo apt-get install gstreamer0.10-ffmpeg

sudo apt-get install gstreamer0.10-plugins-bad

sudo apt-get update

Установить ffmpeg внутри anaconda3 "

conda install -c menpo ffmpeg = 2.7.0

Dowload Opencv 3.1.0"

wget https://github.com/Itseez/opencv/archive/3.1.0.zip unzip 3.1.0.zip

mkdir build

cd build

cmake -DBUILD_TIFF = ON -DBUILD_opencv_java = OFF -DWITH_CUDA = OFF -DWITH_FFMPEG = OFF -DENABLE_AVX = ON -DWITH_OPENGL = ON -DWITH_OPENCL = ON -DWITH_IPP = ON -DWITH_TBB = ON -DWITH_EIGEN = ON -DWITH_V4L = ON -DBUILD_TESTS = OFF -DBUILD_PERF_TESTS = OFF -DCMAKE_BUILD_TYPE = RELEASE -DCMAKE_INSTALL_PREFIX = $ (python3 -c "import sys; print (sys.prefix) ") -DPYTHON3_EXECUTABLE = $ (который python3.5) -DPYTHON3_INCLUDE_DIR = $ (python3 -c" из distutils.sysconfig импортировать get_python_inc; print (get_python_inc ()) ") -DPYTHON3_PACKAGES_PATH = $ (python3 -c «from distutils.sysconfig import get_python_lib; print (get_python_lib ())») ..

make

sudo make install

23
задан sk8forether 20 September 2017 в 00:06
поделиться

5 ответов

Этот недавний поток дает пример того, где он пригождается. Существует основной класс Формы и классы Круг и Прямоугольник, полученный из него. В тестировании на равенство очевидно, что Круг не может быть равен Прямоугольнику, и это было бы бедствие, чтобы попытаться сравнить их. При итерации через набор указателей на Формы dynamic_cast действительно удваивает обязанность, говоря Вам, если формы сопоставимы и дают Вас надлежащие объекты сделать сравнение на.

Векторный итератор не dereferencable

9
ответ дан Community 29 November 2019 в 03:10
поделиться

Вот что-то, что я часто делаю, это не симпатично, но это просто и полезно.

я часто работаю с шаблонными контейнерами, которые реализуют интерфейс, воображают что-то как

template<class T>
class MyVector : public ContainerInterface
...

, Где ContainerInterface имеет основной полезный материал, но это - все. Если я хочу определенный алгоритм на векторах целых чисел, не представляя мою шаблонную реализацию, полезно принять интерфейсные объекты и dynamic_cast это вниз к MyVector в реализации. Пример:

// function prototype (public API, in the header file)
void ProcessVector( ContainerInterface& vecIfce );

// function implementation (private, in the .cpp file)
void ProcessVector( ContainerInterface& vecIfce)
{
    MyVector<int>& vecInt = dynamic_cast<MyVector<int> >(vecIfce); 
    // the cast throws bad_cast in case of error but you could use a
    // more complex method to choose which low-level implementation
    // to use, basically rolling by hand your own polymorphism.

    // Process a vector of integers
    ...
}

я мог добавить Процесс () метод к ContainerInterface, который будет полиморфно разрешен, это был бы более хороший метод ООП, но я иногда предпочитаю делать это этот путь. Когда у Вас есть простые контейнеры, много алгоритмов, и Вы хотите сохранить свою реализацию скрытой, dynamic_cast предлагает легкое и ужасное решение.

Вы могли также посмотреть на методы двойной отправки.

HTH

1
ответ дан rlerallut 29 November 2019 в 03:10
поделиться

Мой текущий игрушечный проект использует dynamic_cast дважды; однажды для работы вокруг отсутствия нескольких диспетчеризируют в C++ (это - система стиля посетителя, которая могла использовать, несколько диспетчеризируют вместо dynamic_casts), и однажды к особому случаю определенный подтип.

Оба из них приемлемы, по моему мнению, хотя первый, по крайней мере, происходит от дефицита языка. Я думаю, что это может быть общей ситуацией на самом деле; большая часть dynamic_casts (и очень много "шаблонов разработки" в целом) являются обходными решениями для определенных дефектов языка, а не чего-то, что стремится.

0
ответ дан DrPizza 29 November 2019 в 03:10
поделиться

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

0
ответ дан Eclipse 29 November 2019 в 03:10
поделиться

Хорошо это действительно было бы любезно с дополнительными методами в C#.

, Например, скажем, у меня есть список объектов, и я хочу получить список всех идентификаторов от них. Я могу ступить через них всех и вытащить их, но я хотел бы сегментировать тот код для повторного использования.

, таким образом, что-то как

List<myObject> myObjectList = getMyObjects();

List<string> ids = myObjectList.PropertyList("id");

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

Так

public static List<string> PropertyList(this object objList, string propName) {
    var genList = (objList.GetType())objList;
}

было бы потрясающим.

0
ответ дан 29 November 2019 в 03:10
поделиться
Другие вопросы по тегам:

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