受保护的继承,转发和转换运算符

时间:2014-08-05 08:15:10

标签: c++ inheritance protected explicit-conversion

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

通过执行此操作,我的派生class现在能够访问struct中的所有内容,同时将其与程序的其余部分隐藏,但它有一个成本: 编译器不再允许我从这个派生的class隐式转换为基本的C风格struct

因此,要再次启用此功能,我在派生的public中添加了operator转化class。但是这里出现了奇怪的事情:

  • 首先,我无法将operator标记为explicit:编译器开始说" illigal storage class"在struct定义中的operator类型。
  • 没有explicit关键字,编译器仍然认为转换在调用时无法访问(我使用static_cast<T>())。

有什么想法吗? (我使用的是Visual Studio 2010)

代码示例:

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

class Data : protected DataFromC
{
public:

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

0 个答案:

没有答案