非名前空間スコープでの C の明示的な特殊化エラー
メンバー関数テンプレートの外部で明示的な特殊化を試行すると、C コンパイル エラーが発生する場合があります。名前空間スコープを変更すると、「非名前空間スコープでの明示的な特殊化」というメッセージが表示されます。この問題は、テンプレートまたはその包含クラスの名前空間内で明示的な特殊化を宣言することを義務付ける C 標準の違反に関係しています。
この問題を解決するには、次のオプションを検討してください。
namespace detail { template <typename TL> void Verify(int, int[]) {} template <> void Verify<int>(int, int[]) {} } template<typename T> class CConstraint { // ... template <typename TL> void Verify(int position, int constraints[]) { detail::Verify<TL>(position, constraints); } };
特殊化を正しいスコープに配置するか、非メンバー関数に転送することにより、コンパイル エラーは次のようになります。解決しました。
以上がC が「名前空間以外のスコープでの明示的な特殊化」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。