gpt4 book ai didi

c++ - 有什么方法可以访问 union 内部的 protected 声明?

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

我是在为 C++ 库生成包装绑定(bind)的上下文中问这个问题的。示例代码:

union Union
{
protected:
struct ProtClass
{
};
};

包装器绑定(bind)是用 extern "C"函数编写的,它要求类型是可访问的(IOW 嵌套类型声明必须是公共(public)的)。访问 classes 中 protected 声明的一个简单解决方法是从类继承并使用 C++ 的公共(public)重新声明功能,该功能允许在 extern "C"函数中使用声明。例如:

class Class
{
protected:
struct NestClass
{
};
};

class PubDeclClass : Class // autogenerated
{
public:
Class::NestClass; // redeclare nested class as public (can also use 'using' here)
};

// autogenerated (normally generated only if NestClass isn't a POD type)
void* getNewNestClass() { return new PubDeclClass::NestClass; }

很简单,但是这个技巧不能用于 union ,因为它们不能被继承。您知道我可以用来从外部“C”函数访问 union 的嵌套 protected 声明的任何技巧吗?

允许这样做的目的是在目标语言中创建 C++ 库的一对一镜像,这意味着目标语言将具有与库中相同的访问说明符。 “C”函数是 C++ 代码和目标语言代码之间的粘合剂(SWIG 也使用这种方法,尽管它并不总是包含嵌套声明)。

就我个人而言,我希望有某种 g++ 扩展,我可以使用它通过一些特殊语法将非公共(public)符号重新声明为公共(public)符号,其唯一目的是编写库包装器。这将极大地简化我的代码生成器。

最佳答案

为什么不能使用简单的包装器:

struct UnionWrapper
{
union
{
protected:
struct ProtClass { };
};
};

class Z12 : public UnionWrapper
{
};

这只是一个绕过禁忌症的工作。

关于c++ - 有什么方法可以访问 union 内部的 protected 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804407/

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