我如何通过继承将模板参数传递到模板的子类
How do I deliver templates arguments to templated sub-class via inheritance?
i具有此代码,该代码使用模板父类A
,该类别具有一个模板的子类C
。A
采用类型(T
),C
在其模板参数中采用该类型(T t
)的对象。我要做的是,在类B
的继承中,给C
的模板参数,制作一个b
对象,并调用C
的.h
成员函数。但是我会遇到以下错误:
prog.cpp:10:44:错误:太多的模板参数列表
PROG.CPP:在功能'int main()'
中:
PROG.CPP:14:5:错误:'B'
在此范围中未声明
PROG.CPP:14:7:错误:预期';'
'b'
template <typename T> struct A {
protected:
template <T> struct C {
T h( T t ) { return t * t; }
};
};
template <typename T = int> template <T t = 5> struct B : public A<T>::C<t> {};
int main() {
B b;
b.h();
}
当我实例化 B
对象时,该错误被调用。我尝试改变了很多事情,但这并没有帮助。例如,我更改了:
template <typename T = int> template <T t = 5> struct B...
to
template <typename T = int> struct B...
和更改
: public A<T>::C<t> {};
to
: public A<T>::C<T t = 5> {};
,但我收到了更多错误:
prog.cpp:10:53:错误:非模板
'C'
用作模板
PROG.CPP:10:53:注意:使用'A<T>::template C'
表示它是模板
prog.cpp:10:66:错误:预期的'{'
';'
Token
PROG.CPP:在功能'int main()
中:
PROG.CPP:14:7:错误:'b'
之前缺少模板参数
prog.cpp:14:7:错误:预期的';'
'b'
我也对我得到B was not declared in this scope
的第一组错误感到好奇。怎么可能?这是我定义B
的方式吗?我会做什么错?
您必须对代码进行2个更改:
// First you don't need and should not use 2 templates
template <typename T = int, T t = 5> struct B
// C++ doesn't know that A<T>::C is a template so you should say it here
: public A<T>::template C<t> {};
相关文章:
- 如何将参数传递给正在使用模板的类
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 如何将子类向量传递给需要基类向量的函数
- 如何将模板函数作为模板类参数传递
- c++将子类作为参数传递
- 将基类 2 参数构造函数调用到子类 1 参数构造函数中
- 我如何通过继承将模板参数传递到模板的子类
- C++-使指向超类的指针与函数中的子类参数匹配
- 将子类对象传递给采用超类对象的函数
- 将泛型模板类作为函子参数传递
- CRTP+可变模板+提取CRTP子类参数
- 可以将子类作为参数传递给具有超类参数的函数吗?c++
- 无法将子类实例作为参数而不是超类传递
- 通过值将子类对象传递给接受超类对象的函数是定义良好的行为吗
- c++在参数中将子类方法传递给基类方法