问题描述
我正在尝试专门设计这样的模板方法:
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?