我有点不知所措,模板的模板。
#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;
}这不编译,我也不理解编译器的错误消息。
expected a class template, got ‘H<T>’发布于 2016-03-16 15:57:12
正确的语法就是传递H
template <class T, template<class> class H>
void Bar<T, H>::barbar() {}
^^H<T>是一个具体的类型,H本身就是您要寻找的类模板。
发布于 2016-03-16 15:56:57
H<T>本身就是一种类型,因此您不需要在Bar的模板参数中添加template<class>前缀。
下面是一个简化的示例:
template<class A>
class T1 {
A a;
};
template<class B>
class T2 {
B a;
};
class T3 {
T1<T2<int> > example;
};发布于 2016-03-16 15:57:31
如果要定义成员函数barbar(),则应
template <class T, template<class> class H>
void Bar<T, H>::barbar(){
// use the type H<T> here
};https://stackoverflow.com/questions/36040641
复制相似问题