0

我正在尝试使用protected继承来隐藏 C 样式的struct成员。

通过这样做,我的派生class现在能够访问所有内容,struct同时从程序的其余部分隐藏它,但它有一个成本:编译器不再允许我从这个派生隐式class转换为基本 C-style struct

因此,为了再次启用该功能,我在派生public的. 但奇怪的事情来了:operatorclass

  • 首先,我无法标记operatoras :编译器开始在定义中的类型explicit上说“非法存储类” 。structoperator
  • 如果没有explicit关键字,编译器仍然会在调用它的时候将转换识别为不可访问(我使用过static_cast<T>())。

任何想法?(我正在使用 Visual Studio 2010)

代码示例:

struct DataFromC
{
    int a, b, c;
};

class Data : protected DataFromC
{
public:

    explicit operator DataFromC()
    {
        return (DataFromC)(*this);
    }
};
4

0 回答 0