当前位置: 首页 > 知识库问答 >
问题:

C结构绑定不工作与bitset

松俊才
2023-03-14

我在写一个函数,需要返回多个变量,其中一个是位集。然后我遇到了一些奇怪的编译错误。

我尝试了不同的编译器,它们都会产生错误,尽管消息不同。

我试着googling了一下,似乎和公共和私有继承有关。但我认为它不应该以任何方式影响这段代码。

简化代码(C 17)如下所示:

#include <bitset>
auto f() { return bitset<100>(); }

int main()
{
    auto [a] = f();
    return 0;
}

如果我移除方括号(即移除结构化绑定并使用普通自动),它就会工作。

错误消息如下:

source.cpp:在函数int main()中:

来源cpp:9:18:错误:“标准::_Base_位集”

9 |     auto [a] = f();

  |                  ^

返回的编译器:1

所以我的问题是:这是预期的行为还是我做错了什么?欢迎提出建议。

共有2个答案

邓子濯
2023-03-14

这不是结构化绑定的目的。

你有一个比特集。

您的方法可能会触发SBs规则,该规则可以绑定到数据成员;但是,正如您所发现的,这不是有用或受支持的东西,每个实现(代码稍有不同)都会产生不同的症状。

只需以通常的方式使用这个单一返回值。

松增
2023-03-14

有三种类型可用于结构化绑定:

  • 语言数组

std::bitset不是这些。它的规范没有说明它的成员是什么,也没有为元组协议提供选择加入。因此,它不适用于结构化绑定。预计auto[a]=f();会失败。

如果有的话,为什么位集

 类似资料:
  • 我有一个简单的测试,我试图将一个弱ptr参数绑定到一个接受弱ptr的全局函数,并在支持指针仍然有效的情况下调用一个方法。 当我用弱指针创建lambda时,这似乎是有效的。如果我用weak_ptr直接调用全局方法,它也可以工作。但是,如果我事先将全局函数绑定到weak_ptr,它似乎不起作用。下面的淡化代码说明了这个问题。 我一定错过了一些简单的东西。有什么线索吗? 结果输出: 期望第一个weakP

  • 我已经创建了一个绑定适配器来显示毕加索的图片,但它不工作。我有以下错误: 发现数据绑定错误。****/数据绑定错误****Msg:在Android.Widget.ImageView上找不到参数类型为java.lang.String的属性'app:loadPicture'的设置器。文件:/home/groupevsc.com/mathieu_labar/documents/projects/andr

  • 简短版本: 我希望能够将结构转换为元组。至少是那种类型。在下面的代码中,convertToTuple函数不起作用,因为可变参数不能用于结构化绑定(据我所知)。关键是:自动 基本上,我需要的是一种将自定义结构的类型转换为元组的方法,元组包含结构中的所有类型。例如: 具体问题: 我想创建一个模板函数,它将一个类型或一个类型列表作为模板参数,并生成一个纹理列表,每个纹理包含一个项目。另一个函数可以对纹理

  • 我的任务是对接angular应用程序,并使用Nginx提供服务。 我已将angular项目构建到dist文件夹,并希望将此文件夹移动到nginx- 这就是我Docker项目的结构 在这个目录的顶部是一系列其他服务,它们需要与angular应用程序一起运行,而angular应用程序正在按预期运行。用下面的docker编写。yml文件 当我用docker build构建并运行这个容器时,它会按预期运行

  • 我在这里找到了最初的*C结构化绑定方案。它提出了一种轻松绑定多个返回值的方法,即: 但现在我看到每个人都指向 现在我学习了“列表是{like,this}编写的”,出现了一种新的列表语法?为什么?这里的花括号有什么问题?

  • 我用于DTO POJO。对于桌面客户端GUI,我使用JavaFX。当然,我想有双向(不是单声道!)数据绑定。我找到了两个解决方案: 1)使用特殊的类适配器。例如,如果我们有POJO类Person,那么我们创建JavaFx(*Property)类PersonAdapter。此外,在POJO Person中,我们添加了PropertyChangesUpport。这个方法可以工作,但是每个DDPress