gpt4 book ai didi

c++ - 使用界面

转载 作者:太空狗 更新时间:2023-10-29 23:53:21 25 4
gpt4 key购买 nike

我正在重构的代码中具有以下形式的函数:

A f()
{
if(existing)
return A();
else
return A(handle);
}

Safe Bool Idiom 稍后用于测试 A 是否与句柄相关联,即我们是否应该调用该对象的类方法,该类方法在内部需要有效的句柄才能执行。 A 的方法是 const。

我想在这里返回一个接口(interface) IA。因此我必须返回一个指针吗?如果是这样,我将使用 boost 共享指针。我可以测试指针是否指向某物。

有什么方法可以让我改用这里的引用文献吗?您会推荐这种方法还是认为 boost::shared_ptr 是可行的方法?

更新

A 派生自 IA。

我的编译器是 gcc 版本 4.4.3。

这段代码最大的问题是 A 用于与外部 C API 交互。因此,我希望使用 IA 接口(interface)作为我的模拟 A 及其实现 A 的基础来模拟它。然后在上面的方法 f() 之外,我将其视为工厂,我将只使用 IA 指针。换句话说,依赖注入(inject)。

所以 A 基本上是一个句柄和一组需要句柄的 C API 函数的接口(interface)。我可以有多个类型为 A 的对象,其中接口(interface)相同但句柄不同。

最佳答案

我会返回 std::unique_ptr< AI >对象:

std::unique_ptr< AI > f()
{
if(existing)
return std::unique_ptr< AI >( new A() );
else
return std::unique_ptr< AI >( new A(handle) );
}

在上述情况下,切片不会发生,编译器将移动*对象。

* 我假设您使用的是 c++11。


因为你没有使用c++11,最简单的是使用boost::shared_ptrs :

boost::shared_ptrs< AI > f()
{
if(existing)
return boost::shared_ptrs< AI >( new A() );
else
return boost::shared_ptrs< AI >( new A(handle) );
}

在这种情况下,您不必关心创建的对象是否以及何时被销毁。 boost::shared_ptrs会处理的。

关于c++ - 使用界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307268/

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