重複の可能性:
条件付きで友達クラスを宣言する方法は?
この質問は、C ++ 03で条件付きでフレンドクラスを宣言できますか?。具体的には、C ++ 11は、条件付きでフレンドクラスを宣言するのに役立つ追加のオプションを提供しますか?つまり、C ++ 11でこれを行うことは可能ですか?
cplusplus.comを調べてみると、に出くわしstd::enable_if
ました。使ってみましたが、正しい構文がわかりませんでした。std::enable_if
この目的に使用するのに適切な構成ですか?以下は、そこに示されている例に基づいて、私が試したコードです。ここでは実際にはテンプレートは必要ありませんが、そこに示されているすべてのサンプルコードでテンプレートが使用されているため、テンプレートを回避する方法がわかりません。
class Foo {
template<typename T> struct std::enable_if<true, T> {
typedef T Bar;
friend class Bar;
};
};
これにより、次のコンパイルエラーメッセージが表示されます。
prog.cpp:5:36: error: 'enable_if' is not a template
prog.cpp:5:55: error: qualified name does not name a class before '{' token
以下のコメントで説明されているように、これをより見やすくするために編集してください。この要件は珍しいものです。これは、私が取り組んでいるハードウェアシミュレーションの新しい研究プロジェクトの一部です。テストベンチはC++で記述されており、変数を波形で表示したいと思います。私は他のさまざまなオプションを調査しましたが、実際的な考慮事項から、フレンドクラスを使用する必要があることがわかりました。友人は値をキャプチャして波形を生成しますが、波形が必要な場合にのみ友人がいることを望みます。常にではありません。