Bolehkah Fungsi Ahli C Dikhususkan Separa?

Susan Sarandon
Lepaskan: 2024-11-15 14:47:02
asal
153 orang telah melayarinya

Can C++ Member Functions Be Partially Specialized?

Partial Specialization of Class Member Functions in C++

When working with templates in C++, you may encounter situations where you want to partially specialize a member function. However, it's important to understand that partial specialization of a member function alone is not possible.

In order to partially specialize a member function, you need to partially specialize the entire class. This is because member functions are tied to the class they belong to, and their behavior may depend on the template arguments of the class.

Consider the following example:

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&amp; Deform(){ 
        m_t*=nValue; 
        return *this;
    }
};

template <typename T>
Object<T,0>&amp; Object<T,0>::Deform(){
    this-&gt;m_t = -1;
    return *this;
}
Salin selepas log masuk

If you attempt to compile this code, you will get an error stating:

PartialSpecification_MemberFu.cpp(17): error: template argument
list must match the parameter list Object<T,0>&amp; Object<T,0>::Deform().
Salin selepas log masuk

To resolve this issue, you need to partially specialize the entire 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&amp; Deform()
    {
        std::cout &lt;&lt; "Spec\n";
        m_t = -1;
        return *this;
    }
};
Salin selepas log masuk

By partially specializing the class, you can now override the behavior of the Deform() function for the specific case when nValue is 0.

Atas ialah kandungan terperinci Bolehkah Fungsi Ahli C Dikhususkan Separa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan