C でのクラス メンバー関数の部分特殊化
C でテンプレートを使用する場合、関数を部分的に特殊化したい状況に遭遇することがあります。メンバー関数。ただし、メンバー関数だけを部分的に特殊化することはできないことを理解することが重要です。
メンバー関数を部分的に特殊化するには、クラス全体を部分的に特殊化する必要があります。これは、メンバー関数が所属するクラスに関連付けられており、その動作がクラスのテンプレート引数に依存する可能性があるためです。
次の例を考えてみましょう。
template <typename T, int nValue> class Object { private: T m_t; Object(); public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform(){ m_t*=nValue; return *this; } }; template <typename T> Object<T,0>& Object<T,0>::Deform(){ this->m_t = -1; return *this; }
このコードをコンパイルすると、次のようなエラーが表示されます:
PartialSpecification_MemberFu.cpp(17): error: template argument list must match the parameter list Object<T,0>& Object<T,0>::Deform().
この問題を解決するには、コード全体を部分的に特殊化する必要があります。 class:
template <typename T> class Object<T, 0> { private: T m_t; Object(); public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform() { std::cout << "Spec\n"; m_t = -1; return *this; } };
クラスを部分的に特殊化することで、nValue が 0 の場合の特定のケースに対する Deform() 関数の動作をオーバーライドできるようになりました。
以上がC メンバー関数は部分的に特殊化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。