protected
継承を使用して C スタイルのstruct
メンバーを非表示にしようとしています。
これを行うことで、派生物はプログラムの残りの部分から隠しながらclass
からすべてにアクセスできるようになりましたが、コストがかかります。コンパイラは、派生物からベース C スタイルへの暗黙的なキャストを許可しなくなります。struct
class
struct
そのため、機能を再度有効にするために、派生にpublic
変換を追加しました。しかし、ここで奇妙なことが起こります:operator
class
- まず第一に、
operator
as : コンパイラにフラグを立てることができませんでした: コンパイラは、定義の型でexplicit
「不正なストレージ クラス」と言い始めます。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);
}
};