gpt4 book ai didi

c++ - POD 类型作为结构的代理

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:40 25 4
gpt4 key购买 nike

我想使用 POD 类型作为某些结构的代理。更准确地说,我尝试做以下事情:

struct Foo { /* some fields */ };

extern Foo global_array[SIZE]; // initialized elsewhere

struct Proxy
{
Foo* pointer_;
}

Proxy get_first_element_as_pointee()
{
return &global_array[0];
}

在上面的代码中,我有一个包含 Foo 结构的全局 C 数组,我想获取第一个。但是,我不想公开 Foo 而是代理。问题是转换不起作用。我收到以下错误消息:

error: could not convert ‘& global_array[0]’ from ‘Foo*’ to ‘Proxy’ { return &global_array[0]; }

编辑:我修改了我的问题,这样它会更清楚

最佳答案

get_first_element_as_pointee() 尝试返回一个 Foo* 但需要一个 Proxy。编译器会引发错误,因为它“不知道”如何将 Foo* 转换为 Proxy

虽然我很欣赏 Yola 的把戏,但我的有点不同而且更简单:

“解释”的一种可能方法是为struct Proxy 定义一个转换构造函数:

struct Foo { /* some fields */ };

extern Foo global_array[SIZE]; // initialized elsewhere

struct Proxy
{
Foo* pointer_;

// This is the trick: provide a "conversion constructor".
Proxy(Foo *pointer): pointer_(pointer) { }
};

Proxy get_first_element_as_pointee()
{
return &global_array[0];
}

回想 POD 类型的实际含义(这是问题标题中所要求的),这个答案可能还不够。

根据对 SO: Can't C++ POD type have any constructor? 的回答:

POD means Plain Old Data type which by definition cannot have user-defined constructor.

该死——我的错。

另一个答案(没有转换构造函数更简单)最初由@bolov 给出但已删除:

struct ProxyPOD
{
Foo* pointer_;
};

ProxyPOD get_first_element_as_pointee2()
{
ProxyPOD proxy = { &global_array[0] }; // as you would do in C
return proxy;
}

life demo on ideone

关于c++ - POD 类型作为结构的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769741/

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