問題タブ [private-inheritance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
91 参照

c++ - プライベート継承と関数からの参照を返す

今、私は以下のコードを持っています:

後でコードを追加します。

次に、VS2010 はコンパイラ エラーを通知します: エラー C2243: '型キャスト': 'CEnv *' から 'Env &' への変換が存在しますが、アクセスできません。

私の意見では、プライベート ヘリットを使用する場合は関係がないため、エラーを表示するのは正しいことです。しかし、最初のコード パターンはうまく機能します。なぜだろう?

0 投票する
1 に答える
652 参照

c++ - プライベートに継承されたメンバー関数へのバインド

派生クラスで宣言を使用してstd::bind「パブリック」にした、プライベート基本クラスからメンバー関数を作成したいと思います。using関数を直接呼び出すと機能しますが、メンバー関数ポインターをバインドまたは使用するとコンパイルされないようです。

上記のエラー メッセージを見ると、問題Derived::fooはまだ であり、外部からBase::fooアクセスできないようBaseです。DerivedDerived

これは矛盾しているようです。直接呼び出し、バインドされた関数、および関数ポインターを同じ意味で使用できないようにする必要がありますか?

または(所有していないライブラリにある) を変更せずfooに、Derivedオブジェクトにバインドできるようにする回避策はありますか?BaseDerived

0 投票する
2 に答える
1222 参照

c++ - using 宣言の奇妙な動作

次のコードを見てください

gcc 6.1、clang 3.8 、および msvc 2015 update 3 のすべては、これをコンパイルすることを拒否Aします。gcc はのデフォルト コンストラクタを参照しているようです。msvc と clang はそうではないようです。CABAusing base_type = AA

おそらく、コンパイル エラーは、継承によってトリガーされた名前の挿入が原因である可能性があります (すべてのコンパイラが正常に動作するように変更using base_type = Aするため)。using base_type = ::A

より具体的には、

  1. 私が理解したように、 のようA::typeに、Aは単なるクラス名 (gcc はそれを関数名と誤解しますが) であり、C 内部 Aではなく、またはに導入されBます。この名前が のプライベートと見なされるのはなぜBですか?
  2. このコンパイル エラーはバグと見なすべきですか、それとも標準の仕様の特殊なケースですか?
0 投票する
2 に答える
526 参照

c++ - 私的に派生した子型にキャストする方法は?

以下は、 のセマンティクスを変更して共有ポインタを実装する試みですoperator==

std::make_sharedこのタイプに相当するものを実装するのに苦労しています。これは私の試みです:

これは機能しません: コンパイラ ( g++ 5.4.0) は無効なキャストについて文句を言います。なぜ機能しないのですか? このキャストの代わりに何をすべきですか?

0 投票する
1 に答える
133 参照

c++ - プライベート基本クラスへの 3 つの明示的なアップキャストの違い

プライベートに継承された基本クラス オブジェクトと子オブジェクトの間に次の 3 つの型キャストがあります。そのうちの 2 つは機能しますが、最後の 1 つは機能しません。何が異なる結果をもたらすのか疑問に思っています。

a'*this' と同じではありませんか? どちらもオブジェクトなので? では、なぜ No.1 が機能するのでしょうか。
範囲のせいなら、なぜNo.2が機能するのですか?それらの間の違いを生むそれぞれの背後にあるメカニズムを誰か説明してもらえますか?

また、最初のメソッドは文字列オブジェクトを作成するようです。private 継承の場合、基底クラス参照を派生クラス オブジェクトに設定することはできません。では、一時的な文字列オブジェクトはどのように作成されるのでしょうか?

前もって感謝します。

0 投票する
5 に答える
2751 参照

c++ - プライベート基本クラスから静的メソッドを呼び出す方法は?

サードパーティ ライブラリのレイアウトにより、次のようなコードがあります。

MSVC でコンパイラ エラー C2247 が発生します。

Base::SomeStaticMethod にアクセスできません。Derived1 がプライベートを使用して Base から継承しているためです。

Baseプライベート指定子のため、継承を介してメンバーにアクセスできないことはわかっていますが、との間の継承関係に関係なく、 -Derived2の静的メソッドを呼び出すことができるはずです。 あいまいさを解決し、静的メソッドを呼び出しているだけであることをコンパイラに伝えるにはどうすればよいですか?BaseBaseDerived2