有什么方法可以在工会内部获得受保护的声明吗
Is there any way to gain access to protected declarations inside unions?
我是在为C++库生成包装绑定的上下文中问这个问题的。样本代码:
union Union
{
protected:
struct ProtClass
{
};
};
包装绑定是用外部"C"函数编写的,这些函数要求类型是可访问的(IOW嵌套类型声明必须是公共的)。访问classes
中受保护声明的一个简单解决方法是从类继承并使用C++的公共重新声明功能,该功能允许在外部"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; }
很简单,但这个技巧不能用于工会,因为工会不能继承。你知道我可以用什么技巧从外部"C"函数访问联合的嵌套受保护声明吗?
允许这样做的目的是在目标语言中创建C++库的1对1镜像,这意味着目标语言将具有与库中相同的访问说明符。"C"函数是C++代码和目标语言代码之间的粘合剂(SWIG也使用此方法,尽管它并不总是包装嵌套声明)。
就我个人而言,我很想拥有某种g++扩展,我可以用一些特殊的语法将非公共符号重新声明为公共符号,这只是为了编写库包装器。这将极大地简化我的代码生成器。
为什么不能使用一个简单的包装器:
struct UnionWrapper
{
union
{
protected:
struct ProtClass { };
};
};
class Z12 : public UnionWrapper
{
};
这只是一部关于抑制的作品。
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 公共/私有/受保护是否会更改内存中结构的排列?
- 在父类中公开受保护的构造函数
- 如何从其他结构访问受保护的结构变量
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 何时在抽象类 cpp 中声明受保护的字段
- 在派生的C 类中,访问基类受保护成员作为公共的访问声明
- 错误 C2248:无法访问类中声明的受保护成员
- 有什么方法可以在工会内部获得受保护的声明吗
- 继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员
- 有没有办法从类外部声明一个受保护C++变量?
- 受保护部分中的好友声明
- 声明受保护的函数friend
- 无法访问类 'A' 中声明的受保护成员
- 不能访问类中声明的受保护成员
- 以前声明为受保护的枚举的访问枚举器