gpt4 book ai didi

c++ - 如何做一个常量对象的工厂

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

这不是关于dlib的问题,而是关于如何在dlib上实现一个特性的问题。

Dlib有一个虚拟类 dlib::tensor,以及一个名为 dlib::alias_tensor_instance 的实现。此类的对象是通过调用工厂类 dlib::alias_tensor 上的 operator()(dlib::tensor &original, size_t offset) 构造的,这将创建一个 dlib::alias_tensor_instance 指向原始张量的内部切片,可以在需要张量的任何地方使用,而无需实际复制它。

由于传递 const dlib::tensor& 很常见,我对采用 const 的工厂运算符的重载很感兴趣:

<something> operator()(const dlib::tensor &original, size_t offset);

问题是,我和作者都不知道如何正确地完成它。你们知道任何解决方案吗?这是 GitHub issue .

编辑:正如@Angew 所说,返回的类型必须派生并实现dlib::tensor,因此可以在需要const dlib::tensor& 的地方使用它。

最佳答案

alias_const_tensor_instance 无法安全地派生自 tensor

相反,它拥有一个张量并公开一个隐式operator tensor const&()

这在涉及 SFINAE 模板魔术代码的某些狭窄上下文中可能无法完美工作,但在大多数情况下它会完美地工作。

它可能需要 alias_const_tensor_instance 中的粘合代码来复制 tensor整个 const API 并将其转发到拥有的张量。或者您可以强制用户调用 tensor const& get() const 方法或 tensor const* operator->() consttensor const& operator*() const ,它强制执行 DRY。

我自己,我很想通过 ->* 重载使其成为伪指针类型,而不是复制 const API。

关于c++ - 如何做一个常量对象的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168434/

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