【问题标题】:Class template method specialization类模板方法特化
【发布时间】:2020-12-24 03:24:18
【问题描述】:

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

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 对其进行实例化,但我该怎么做?

【问题讨论】:

  • 您需要使用函数定义对类本身进行部分特化。

标签: c++ class templates template-specialization


【解决方案1】:

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

例如

#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?

【讨论】:

  • 如果 A 类相当大而我只想覆盖该方法怎么办?
  • @perencia 你不能部分专门化一个函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多