ホームページ >バックエンド開発 >C++ >テンプレート化されたクラスまたは構造体をフレンドとして宣言するにはどうすればよいですか?

テンプレート化されたクラスまたは構造体をフレンドとして宣言するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-12 21:47:01937ブラウズ

How to Declare a Templated Class or Structure as a Friend?

フレンド宣言としてのテンプレート化されたクラスまたは構造体

テンプレート化された構造体またはクラスをフレンドとして宣言しようとすると、コンパイル エラーが発生する可能性があります。たとえば、次のコードについて考えてみましょう。

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;

private:
    // ...
};

このコードはコンパイルに失敗し、複数のテンプレート パラメーター リストが許可されていないことを示すエラー メッセージが表示されます。ただし、foo テンプレート構造体のすべての可能なインスタンス化を foo のフレンドにする必要があります。

解決策

これを実現するには、次の宣言を使用できます。

template <typename> friend class foo

この宣言は、 を意味します。 foo クラスのすべての テンプレート インスタンス化は、foo クラスの他の すべて 個のテンプレート インスタンス化の友達になります。

補足

宣言

template <typename>
friend struct foo;

も機能しますが、foo 構造体のすべてのテンプレートのインスタンス化が互いに友達になります。これはおそらく意図した動作です。ただし、フレンド宣言とテンプレートの構文はやや複雑であることに注意してください。

以上がテンプレート化されたクラスまたは構造体をフレンドとして宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。