sqlitecipher & amp; std :: function несовместимость

я использую sqlitecipher (https://github.com/devbean/QtCipherSqlitePlugin) как плагин Qt для шифрования / дешифрования моей базы данных sqlite. ОС есть Убунту 14.04, компилятор GCC 4.9, Qt версия 5.5.1.

#include <QDebug>
#include <functional>
#include <QtSql>

struct A
{
template<typename R>
R fun(std::function<R(double&)> const& f);
double db;
};

template<typename R>
R A::fun(std::function<R(double&)> const& f)
{
return f(db);
}

template<>
void A::fun<void>(std::function<void(double&)> const& f)
{
f(db);
}

double fun(std::function<double(double)> f)
{
return f(1.1);
}

int main(int argc, char *argv[])
{
A a;
a.fun<double>([](double&)->double{return 0;});

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLCIPHER", "db");
db.setDatabaseName(db_path); // encrypted database
db.open();
QSqlQuery q(db);
q.exec("pragma key='testkey'");
bool res =  q.exec("SELECT * FROM TestTable LIMIT 10"); // res == false

while (q.next()) {
qDebug() << q.value(0);
}

db.close();

return 0;
}

Я не могу расшифровать свою базу данных, если я использую std::function в шаблонные функции (res == false).
Если использовать db.setPassword("testkey") вместо q.exec("pragma key='testkey'");, я имею ошибка сегментации.

Когда я удаляю специализацию шаблонов и шаблон или заменяю std::function с указателем на функцию расшифровка работает.

Что особенного в этой ситуации?

Наличие шаблона и его специализация убивает дешифрование после компиляции. Даже без явного использования.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]