ここに問題があります:Factory
というクラスには、同じシグネチャのいくつかの非静的メンバー関数があります。f1
、f2
などと呼ばせてください。私はstd::vector
のメンバー関数へのポインタをstatic const
としたいのですが、実行時にこれを変更する必要はありません。同様に、優雅さの理由から、私はf1
と他のもの(以下では概括的にfi
)を公開するのではなく、vector
でも公開しませんが、それは副次的です。それは不完全なタイプだから、クラスでvector
がを動作しません初期化プライベートフィールドを参照するstatic constクラスメンバーオブジェクトを初期化するにはどうすればよいですか?
、および&Factory::fi
は、その時点では不明です。 fi
はプライベートなので、ファイルレベルの外部で初期化することはできません。はグローバルスコープにはなりません。それを初期化関数に入れて、friend
を実行すると、が書き換えられないので、const
を書き換える必要があります。どのような作品
は次のとおりです。
は、インスタンスごとに、この
vector
の不要なコピーを作成することを犠牲にし、static const
修飾子を取り除きます。static
変数を宣言し、それを返すstatic
メンバ関数を記述します。これと同じようになると思ったが、すべての最適化を実行してプログラムを2倍遅く実行させる。
確かに、後者の欠点のない解決方法を見たいと思います。 switch
またはそれに類似する膨大なパラダイムの変更から機能を呼び出すようにアドバイスしないでください。
。 "エラー:[署名...] Factory :: f1()はこのコンテキスト内でプライベートです"と表示されます。まあ、あなたの*例ではありません。そのコードが現在のコードとどのように大きく異なるかを調べる必要があります。 –
そしてわかりませんが、申し訳ありませんが、私はどこに見えません。あなたのコードはまさに私が心に留めているシナリオです。不思議なことに、これは単独で動作します(そして私が最初に試した方法の1つです)が、私の大きなプロジェクトでは上記のエラーが発生します。 –
@TheVeeさらに詳しいサポートが必要な場合は、エラーを再現する[MCVE](http://stackoverflow.com/help/mcve)を表示してください。私は見ることができないコードを助けることはできません。 –