在模板中专门使用一些方法

Specializing some methods in template

本文关键字:方法      更新时间:2023-10-16

>我有一个具有模板专用版本的类。但是,前者看不到泛型版本实现的方法。如何使泛型版本中的所有方法都可见专业版?

例如:

测试.hpp

#include <iostream>
template <typename T>
class A_base{
public:
    virtual void foo() = 0;
};
template <typename T>
class A : public A_base<T> {
public:
    void foo() override {
        std::cout << "foo: generic type" << "n";
    }
};
template <>
class A<int> : public A_base<int>{
public:
    void bar() {
        std::cout << "bar: int type" << "n";
    }
};

测试.cpp

#include "test.hpp"
int main(){
    A<int> a;
    a.foo(); // expected "foo: generic type"
    a.bar(); // expected "bar: int type"
}

为什么A<int> a看不到foo()

为什么A<int>看不到foo()

通过将类模板A<T>专用于T = int,您可以定义当T类模板对应于int时类模板A<T>如何,并且您提供的专用化(即:A<int>(没有称为foo的成员(但是主模板有(。

可以单独专用化类模板的成员函数。因此,您可以简单地将类模板的成员函数bar专用化T用于T = int,而不是为整个类模板执行此操作:

template <>
void A<int>::bar(){
        std::cout << "bar: int type" << "n";
}