для 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
Этот недавний поток дает пример того, где он пригождается. Существует основной класс Формы и классы Круг и Прямоугольник, полученный из него. В тестировании на равенство очевидно, что Круг не может быть равен Прямоугольнику, и это было бы бедствие, чтобы попытаться сравнить их. При итерации через набор указателей на Формы dynamic_cast действительно удваивает обязанность, говоря Вам, если формы сопоставимы и дают Вас надлежащие объекты сделать сравнение на.
Вот что-то, что я часто делаю, это не симпатично, но это просто и полезно.
я часто работаю с шаблонными контейнерами, которые реализуют интерфейс, воображают что-то как
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
Мой текущий игрушечный проект использует dynamic_cast дважды; однажды для работы вокруг отсутствия нескольких диспетчеризируют в C++ (это - система стиля посетителя, которая могла использовать, несколько диспетчеризируют вместо dynamic_casts), и однажды к особому случаю определенный подтип.
Оба из них приемлемы, по моему мнению, хотя первый, по крайней мере, происходит от дефицита языка. Я думаю, что это может быть общей ситуацией на самом деле; большая часть dynamic_casts (и очень много "шаблонов разработки" в целом) являются обходными решениями для определенных дефектов языка, а не чего-то, что стремится.
Это может использоваться некоторое время безопасности типов во время выполнения при представлении дескрипторов объектам хотя интерфейс C. Имейте все представленные классы, наследовались общему базовому классу. При принятии дескриптора к функции, сначала слепка к базовому классу, тогда динамического слепка к классу Вы ожидаете. Если они передали в бессмысленном дескрипторе, Вы получите исключение, когда время выполнения не сможет найти rtti. Если они передали в допустимом дескрипторе неправильного типа, Вы получаете Нулевого указателя и можете выдать Ваше собственное исключение. Если они передали в корректном указателе, Вы хороши для движения. Это не является надежным, но это, конечно, лучше в ловле ошибочных вызовов к библиотекам, чем прямое дает иное толкование броску от дескриптора, и ожидающий, пока некоторые данные загадочно не повреждаются при передаче неправильного дескриптора в.
Хорошо это действительно было бы любезно с дополнительными методами в 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;
}
было бы потрясающим.