gpt4 book ai didi

c++ - 我应该如何将 C 库包装到 C++ 中

转载 作者:太空狗 更新时间:2023-10-29 20:40:49 25 4
gpt4 key购买 nike

典型的 C 库如下所示:

foo_t * foo_open();
int foo_query( foo_t * );
int foo_close( foo_t * );

我可以看到两种将它们包装成隐蔽 RAII 结构的方法。我可以创建一个类并包装每个 C 函数:

class foo
{
public:
foo(): m_impl( foo_open() ) { }
~foo() noexcept { foo_close( m_impl ); }
int query() { return foo_query( m_impl ) };
};

或者我可以使用带有自定义析构函数的智能指针:

class foo_destructor
{
public:
void operator()( foo_t * const obj ) noexcept
{
foo_close( obj );
}
};

typedef std::unique_ptr< foo_t, foo_destructor > foo_ptr;

并直接使用C接口(interface)。

int main()
{
foo_ptr my_foo( foo_open() );
foo_query( my_foo.get() );
}

现在,我正在使用第二种解决方案,但主要是因为我懒得写所有的成员函数。为什么一种方法真的应该优于另一种方法?

最佳答案

第一种方法是更多的 C++ 做事方式。所有函数都组合到一个逻辑单元(类)中,您封装了数据以便 RAII 防止资源泄漏,并且您还设法删除了 foo_ 前缀!

关于c++ - 我应该如何将 C 库包装到 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22606809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com