类模板方法特化

per*_*cia 2 c++ templates class template-specialization

我正在尝试专门化这样的模板方法:

template <typename X, typename Y>
class A {
public:
    void run(){};
};


template<typename Y>
void A<int, Y>::run() {}
Run Code Online (Sandbox Code Playgroud)

但我得到

main.cpp:70:17: error: nested name specifier 'A<int, Y>::' for declaration does not refer into a class, class template or class template partial specialization
Run Code Online (Sandbox Code Playgroud)

我知道专业化尚未完成,因为我还没有使用特定的 实例化它Y,但是我该怎么做呢?

Vla*_*cow 5

您首先需要部分特化类本身,包括函数声明。之后,您可以编写其定义。您可能不会部分特化某个功能。

例如

#include <iostream>

template <typename X, typename Y>
class A {
public:
    void run()
    {
        std::cout << "How do you do?\n";
    };
};


template<typename Y>
class A<int, Y>
{
public:
    void run();
};

template<typename Y>
void A<int, Y>::run()
{
    std::cout << "Hello World!\n";
}

int main() 
{
    A<int, int>().run();
    A<double, int>().run();
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序输出。

Hello World!
How do you do?
Run Code Online (Sandbox Code Playgroud)