Ваша проблема здесь в том, что вы неправильно перенаправляете параметры.
InflateInput<DeflateInput<File>> inflate1(0, File{"filename"}, 9, 0);
Вызывает конструктор
template<typename ...Args>
InflateInput(int header, Args ...args) : source(args...) {}
, где Args...
равно File, int, int
. Поскольку у args...
есть имя, целые пачки являются lvalue, но ваш DeflateInput
принимает только rvalue ссылку на File
из
DeflateInput(T &&stream, int level, int header) : source(std::move(stream)) {}
. Самый простой способ - вызвать std::move
args
, как
InflateInput(int header, Args ...args) : source(std::move(args)...) {}
, но на самом деле вы должны использовать пересылку ссылок вместе с std::forward
для полной пересылки всех параметров. Это изменит конструктор на
InflateInput(int header, Args&& ...args) : source(std::forward<Args>(args)...) {}
iPhone не поддерживает динамическое подключение встроенных платформ. В то время как Вы смогли обманывать средство моделирования для работы, оно не будет работать над устройством. Если Вы хотите использовать код, необходимо создать статическую библиотеку для платформы (libpldatabase.a) и затем связать их с приложением.
GUI XCode не обеспечивает хороший интерфейс для статического подключения, необходимо будет добавить соответствующие флаги в сборке prefs (-lpldatabase-L/whatever/dir/it/is/in).
РЕ @mipadi: ZeroLink был удален в Xcode 3.1 и не существует для iPhone SDK. Корректным ответом является Louis; iPhone не поддерживает динамично загруженные платформы в созданных разработчиками приложениях.
XCode действительно имеет хороший пользовательский интерфейс для статических библиотек; просто перетащите их в проект, и они добавляются к фазе ссылки. Никакая потребность носиться с флагами компоновщика. Проблема возникает, когда необходимо использовать заголовки, предоставленные статичными, освобождает (затем, необходимо добавить пути поиска заголовка вручную), или когда статический lib конфликтует с доступным dylib (именно тогда, необходимо добавить флаг-l вручную).
Это не на самом деле строго верно, что iPhone не поддерживает динамическое подключение. То, что верно, - то, что приложения, установленные App Store, не могут динамично связаться.
App Store / ituned устанавливает программы в/private/var/mobile/... каталог. Любая программа открылась, который живет в том подкаталоге, chrooted и имеет определенные права, снятые при открытии. Процессы chrooted не могут разветвиться, они не могут работать в фоновом режиме, они не могут загрузить динамические библиотеки, и они не могут сохранить файлы за пределами своих небольших защищенных областей диска (за исключением фотографий к фото каталогу).
Тем не менее iPhone выполняет современную операционную систему, которая поддерживает динамическое подключение очень хорошо. Действие 'джейлбрекинга' на самом деле устанавливает программу за пределами chroot тюрьмы, которая может затем сделать вещи как ветвление и сохранить файлы к другим местам на диске и загрузить динамический код.
Apple (и открытое сообщество iPhone) имеет много программ, работающих по телефону (таких как MobilePhone, Мобильный Safari и приложения SpringBoard), который может работать в фоновом режиме и загрузить библиотеки. Они размещаются в другое место на диске (/private/var/stash/Applications часто).
Так..., если Вы хотите продать свое приложение в App Store, Вы не можете загрузить динамическую библиотеку. Который для большинства людей подразумевает, что Вы не можете загрузить его вообще. Но если Вы хотите распределить свое приложение через Cydia (общий взломанный установщик телефонного приложения), затем можно сойти с рук джейлбрекинг телефона и загрузка динамической библиотеки. На самом деле, из-за iTunes устанавливают процесс, являющийся преступником, как Вы узнали, Вы наклоняете равномерную нагрузку dylib из Вашего собственного приложения, что Вы пишете в Вас собственный телефон..., если Вы не перепрошиваете.