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().
要解决此问题,您需要部分特化整个类:
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中文网其他相关文章!