【发布时间】:2021-07-19 13:33:33
【问题描述】:
我正在尝试从派生模板类访问父方法,但尽管在任何地方都使用公共访问,并且“this->”是安全的,但我收到了错误。
error: 'class Derived<TagTypeA, int>' has no member named 'insert'
我不知道我是否在某个地方犯了一个愚蠢的错误,但我无法弄清楚为什么 Derived 类无法访问父类的东西。
我的代码如下所示,也在这里:https://godbolt.org/z/nMbe4fMnM
#include <bits/stdc++.h>
struct TagTypeA;
template<typename T>
class Base {
public:
std::set<T> data;
void insert(const T& v) { data.insert(v); }
void erase(const T& v) { data.erase(v); }
};
template<typename Tag, typename T>
class Derived : public Base<T> {};
// specialization of Derived
template<typename T>
class Derived<TagTypeA, T> {
public:
void call_parent_insert(const T& v) { this->insert(v); }
};
int main()
{
Derived<TagTypeA, int> foo;
foo.call_parent_insert(1);
}
【问题讨论】:
-
Derived<TagTypeA, T>没有基类? -
但它是 Derived
的特化,它以 Base 作为其基类 -
专业基本上是独立的类,和原来的类没有关系
-
哦,我不知道。我想是因为你不能有一个没有非专业版本的专业类,它会以某种方式知道继承,但我猜不是。无论如何,写
class Derived<TagTypeA, T> : public Base<T>解决了这个问题。谢谢!
标签: c++ oop templates inheritance