代码之家  ›  专栏  ›  技术社区  ›  Nidhoegger

如何自动返回C指针

c++
  •  1
  • Nidhoegger  · 技术社区  · 5 年前

    我目前正在为C C++编写一个C语言库。为此,我创建了一个对象,当一个对象超出范围时,它会自动删除C部分。我这样做是作为一个例子 sqlite3_stmt * :

    class auto_stmt_t
    {
    public:
        auto_stmt_t() :
            stmt_(NULL)
        {
    
        }
    
        virtual ~auto_stmt_t()
        {
            reset();
        }
    
        void reset()
        {
            if (stmt_ != NULL)
            {
                ::sqlite3_finalize(stmt_);
                stmt_ = NULL;
            }
        }
    
        bool prepare(const std::string &query, sqlite3 *db)
        {
            reset();
            return ::sqlite3_prepare_v2(db, query.c_str(), -1, &stmt_, NULL) == SQLITE_OK;
        }
    
    private:
        sqlite3_stmt stmt_;
    
    };
    

    现在我想把这个对象传递给 sqlite 功能,如 sqlit3_step 这需要一段时间 sqlite3_stmt* 作为论据。

    有没有一种方法可以让我的物体通过,然后自动浇铸?大概是这样的:

    auto_stmt_t stmt;
    stmt.prepare("SELECT bar FROM foo");
    ::sqlite3_step(stmt);
    

    我已经看到这是可能的,我需要哪个操作员过载才能自动获取 sqlite3_stmt* 为了让它起作用?

    2 回复  |  直到 5 年前
        1
  •  3
  •   Ted Lyngmo    5 年前

    添加

    operator sqlite3_stmt* () const { return &stmt_; }
    

        2
  •  0
  •   Maxim Egorushkin    5 年前

    一种方法是添加一个调用 sqlite3_step