gpt4 book ai didi

c++ - 特化模板中的一些方法

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:39 25 4
gpt4 key购买 nike

我有一个具有模板特化版本的类。但是,前者看不到通用版本实现的方法。我怎样才能使通用版本中的所有方法都可见专业版?

例如:

测试.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()

最佳答案

Why A<int> a can't see foo()?

通过特化类模板 A<T>对于 T = int , 你正在定义类模板 A<T>是什么时候T对应int ,并且您提供的特化(即:A<int>)没有名为foo的成员(但是主模板确实如此)。

可以单独特化类模板的成员函数。所以,你可以简单地专门化成员函数 bar类模板 T对于 T = int而不是为整个类模板这样做:

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com