protected継承を使用して C スタイルのstructメンバーを非表示にしようとしています。
これを行うことで、派生物はプログラムの残りの部分から隠しながらclassからすべてにアクセスできるようになりましたが、コストがかかります。コンパイラは、派生物からベース C スタイルへの暗黙的なキャストを許可しなくなります。structclassstruct
そのため、機能を再度有効にするために、派生に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);
}
};