C++ 模板语法的模板
我对模板的模板有点不知所措C++ 模板语法的模板,c++,templates,C++,Templates,我对模板的模板有点不知所措 #include <iostream> template <class T> class Foo{ T foobar; T getFooBar(); }; template <class T> T Foo<T>::getFooBar(){ return (T) 2.0; } template <class T, template<class> class H> cla
#include <iostream>
template <class T>
class Foo{
T foobar;
T getFooBar();
};
template <class T>
T Foo<T>::getFooBar(){
return (T) 2.0;
}
template <class T, template<class> class H>
class Bar{
void barbar();
};
template <class T, template<class> class H>
void Bar<T, H<T> >::barbar(){}
int main(int iargc, char *iargv[]){
// do stuff;
}
#包括
模板
福班{
T foobar;
T getFooBar();
};
模板
T Foo::getFooBar(){
回报率(T)2.0;
}
模板
分类栏{
void barbar();
};
模板
无效条::barbar(){}
int main(int-iargc,char*iargv[]{
//做事;
}
这不会编译,我不理解编译器的错误消息
expected a class template, got ‘H<T>’
需要一个类模板,得到'H'
H
本身就是一种类型,因此您不需要在条的模板参数前面加上模板
以下是一个简化的示例:
template<class A>
class T1 {
A a;
};
template<class B>
class T2 {
B a;
};
class T3 {
T1<T2<int> > example;
};
模板
T1类{
A A;
};
模板
T2类{
B a;
};
T3类{
T1示例;
};
H
本身就是一种类型,因此您不需要在条的模板参数前面加上模板
以下是一个简化的示例:
template<class A>
class T1 {
A a;
};
template<class B>
class T2 {
B a;
};
class T3 {
T1<T2<int> > example;
};
模板
T1类{
A A;
};
模板
T2类{
B a;
};
T3类{
T1示例;
};
正确的语法是只传递H
:
template <class T, template<class> class H>
void Bar<T, H>::barbar() {}
^^
模板
无效条::barbar(){}
^^
H
是一种具体类型,H
本身就是您要查找的类模板。正确的语法应该是只传递H
:
template <class T, template<class> class H>
void Bar<T, H>::barbar() {}
^^
模板
无效条::barbar(){}
^^
H
是一个具体的类型,H
本身就是您要查找的类模板。如果要定义成员函数barbar()
,您应该
template <class T, template<class> class H>
void Bar<T, H>::barbar(){
// use the type H<T> here
};
模板
无效条::barbar(){
//在这里使用H型
};
如果要定义成员函数barbar()
,应该
template <class T, template<class> class H>
void Bar<T, H>::barbar(){
// use the type H<T> here
};
模板
无效条::barbar(){
//在这里使用H型
};
您想做什么H
是一个类,而不是一个类模板我想用一个模板构造一个类作为模板参数。Bar有两个模板参数,一个是类型(如int),一个是类模板(如Foo)。你可以说Bar
。你永远不能说条形码,在任何情况下,这都毫无意义。你想做什么H
是一个类,而不是一个类模板我想用一个模板构造一个类作为模板参数。Bar有两个模板参数,一个是类型(如int),一个是类模板(如Foo)。你可以说Bar
。你永远都不能说条
,在任何上下文中,这都是毫无意义的。