首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板语法模板

模板语法模板
EN

Stack Overflow用户
提问于 2016-03-16 15:50:39
回答 3查看 95关注 0票数 1

我有点不知所措,模板的模板。

代码语言:javascript
复制
#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;
}

这不编译,我也不理解编译器的错误消息。

代码语言:javascript
复制
expected a class template, got ‘H<T>’
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-16 15:57:12

正确的语法就是传递H

代码语言:javascript
复制
template <class T, template<class> class H>
void Bar<T, H>::barbar() {}
            ^^

H<T>是一个具体的类型,H本身就是您要寻找的类模板。

票数 3
EN

Stack Overflow用户

发布于 2016-03-16 15:56:57

H<T>本身就是一种类型,因此您不需要在Bar的模板参数中添加template<class>前缀。

下面是一个简化的示例:

代码语言:javascript
复制
template<class A>
class T1 {
    A a;    
};

template<class B>
class T2 {
    B a;
};

class T3 {
    T1<T2<int> > example;
};
票数 1
EN

Stack Overflow用户

发布于 2016-03-16 15:57:31

如果要定义成员函数barbar(),则应

代码语言:javascript
复制
template <class T, template<class> class H>
void Bar<T, H>::barbar(){
    // use the type H<T> here
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36040641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档