код:
if (this->isConnected())
{
std::unique_ptr<std::vector<std::string>> res = std::make_unique<std::vector<std::string>>();
char* errMsg = NULL; //take it easy, this is common aproach to use char* in this case
sqlite3_exec(mDB.get(), "BEGIN TRANSACTION;", NULL, NULL, NULL);
if (sqlite3_exec(mDB.get(), query.data(), callback, res.get(), &errMsg) != SQLITE_OK)
{
std::cout << "Can't execute query, error: " << errMsg;
}
sqlite3_exec(mDB.get(), "END TRANSACTION;", NULL, NULL, NULL);
if (!res.get()->empty())
{
return std::optional{std::any{res.get()}};
}
}
Возвращаемое значение приходит в такое место:
if (_currentCreator.getAdapter()->isConnected())
{
std::optional<std::any> result =
_currentCreator.getAdapter()->query(_queryStream.str());
if (result.has_value())
{
this->rollback();
return {std::any_cast<std::vector<std::string>>(result.value())}; // <- вот на этой строке кидает bad_any_cast. Может знает кто как решить проблему?
}
}
return std::optional{std::any{res.get()}} что
Зачем вообще вам умный указатель для вектора, который внутри все равно использует кучу?
Как одно с другим связано вообще?
А зачем умный указатель для вектора?
Ну захотелось ему так.
Функция, которая принимает параметр - принимает только указатель. Поэтому так.
Ну, это никак не объясняет умный указатель все равно
int x; &x // int*
Вы, вроде как, ответа так и не получили. Обратите внимание на то, что кладете в any и что пытаетесь получить из него. Вы пытаетесь осуществить приведение Ty* -> Ty (unique_ptr<>::get() возвращает сырой указатель, any-враппер над которым Вы и получите позже из optional).
Обсуждают сегодня