Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板语法的模板_C++_Templates - Fatal编程技术网

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
。你永远都不能说
,在任何上下文中,这都是毫无意义的。