c++ - 类模板方法特化

标签 c++ class templates template-specialization

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

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?

关于c++ - 类模板方法特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63748206/

相关文章:

C++ 模板偏特化

c++ - 编译错误将 ATL 项目从 vs2010 升级到 vs2013

c++ - 从字符数组中消除重复项

python - 扩展 matplotlib Line2D 类

c++ - 使用 C++ 特化模板时的奇怪行为

c++ - 模板链接器错误 : Undefined symbols (linker error), 但所有内容都在一个文件中

c++ - 为什么在非指针堆栈分配变量上调用 delete 时 C++ 不给出编译器错误?

c++ - 将成员变量指针类型转换为对象指针

java - 在eclipse中查找实现抽象类的所有具体类

java - Java中的抽象变量?