C++ 受保护的继承、向上转换和转换运算符
我试图使用受保护的继承来隐藏C风格的结构成员 通过这样做,我的派生类现在能够从struct访问所有内容,同时对程序的其余部分隐藏它,但它有一个代价: 编译器将不再允许我从这个派生类隐式转换到基C样式结构 因此,为了再次启用该功能,我在派生类中添加了一个公共转换运算符。但奇怪的事情来了: 首先,我不能将运算符标记为显式:编译器开始在运算符定义中的结构类型上使用非法存储类。 如果没有explicit关键字,编译器仍然会将转换识别为无法访问,因为它被称为i used static_cast。 有什么想法吗? 我正在使用VisualStudio2010 代码示例:C++ 受保护的继承、向上转换和转换运算符,c++,inheritance,protected,explicit-conversion,C++,Inheritance,Protected,Explicit Conversion,我试图使用受保护的继承来隐藏C风格的结构成员 通过这样做,我的派生类现在能够从struct访问所有内容,同时对程序的其余部分隐藏它,但它有一个代价: 编译器将不再允许我从这个派生类隐式转换到基C样式结构 因此,为了再次启用该功能,我在派生类中添加了一个公共转换运算符。但奇怪的事情来了: 首先,我不能将运算符标记为显式:编译器开始在运算符定义中的结构类型上使用非法存储类。 如果没有explicit关键字,编译器仍然会将转换识别为无法访问,因为它被称为i used static_cast。 有什么想
struct DataFromC
{
int a, b, c;
};
class Data : protected DataFromC
{
public:
explicit operator DataFromC()
{
return (DataFromC)(*this);
}
};
用最少的例子展示你的代码。这是一个糟糕的设计。一方面,您使用受保护的继承来隐藏struct的成员,另一方面,您希望它们仍然可以通过向上转换进行访问。奇怪的尝试修改架构,考虑使用聚合而不是继承。您可能会发现显式显式和转换运算符之间的对比度是启发性的,即如果您想要C++ 11个特性,不要使用2010编译器。因此它不能被视为演员。@Mikhail,呃?转换是转换,转换为非引用类型会产生右值。例如int6.5。我不知道你想说什么