POD类型作为结构的代理
POD types as proxies for structures
我想将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,而是一个代理。问题是转换不起作用。我收到以下错误消息:
错误:无法转换'&global_array [0]"从" foo*"到'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类型的实际含义(在问题标题中需要(,此答案可能不够。
根据此答案:C POD类型不能具有任何构造函数吗?:
POD
表示普通的旧数据类型,根据定义,该类型不能具有用户定义的构造函数。
该死–我的错。
另一个答案(没有转换构造函数甚至更简单(,最初由@bolov给出,但已删除:
struct ProxyPOD
{
Foo* pointer_;
};
ProxyPOD get_first_element_as_pointee2()
{
ProxyPOD proxy = { &global_array[0] }; // as you would do in C
return proxy;
}
IDEONE
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 代理对象的常量正确性
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- POD类型作为结构的代理
- 如何获取c++代理/服务类中继承的soap结构的引用