类模板方法专业化

问题描述

我正在尝试专门设计这样的模板方法

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


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

但是我明白了

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

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

解决方法

首先,您需要部分专门化类本身,包括函数声明。之后,您可以编写其定义。您可能无法部分专门化功能。

例如

#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;
}

程序输出。

Hello World!
How do you do?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...