有没有办法获得递归模板类型?我有一个容器,我想为其指定底层存储策略。但是,内部模板必须使用外部模板的类型,因此它会在类型定义中产生一个循环 - 这是无法指定的。
关于我想要的:
template<typename C>
struct inner {
C * object[16];
};
template<typename T, typename Inner>
struct container {
T value;
Inner<container> holder;
};
C ++ 11解决方案很好(尽管我仍然使用gcc 4.6.3)。
答案 0 :(得分:5)
您需要告诉编译器Inner
是一个模板化的类:
template<typename T, template<typename> class Inner>
struct container {
T value;
Inner<container> holder;
};
答案 1 :(得分:0)
我不确定您添加Inner
类型模板参数的原因,因为您将holder
定义为基于Container
和inner
的类型,两者都可以在您宣布持有人时提供。
您是否计划使用struct inner
以外的任何类型作为Container
的模板参数?如果没有,在VS2010中编译并运行以下简化代码:
#include <vector>
#include <stdio.h>
template <typename C>
struct inner{
C * objects[16];
bool hasobj;
inner():hasobj(false){}
};
template <typename T>
class Container {
inner<Container> holder;
T value;
public:
Container(const T& valueP){
value = valueP;
}
void AddChild(Container* rhs){
holder.objects[0] = rhs; //Always using first location, just for example
holder.hasobj = true;
}
void PrintStuff()const{
if(holder.hasobj){
holder.objects[0]->PrintStuff();
}
printf("VAL IS %d\n", value);
}
};
int main(){
Container<int> c(10);
Container<int> c1(20);
c1.AddChild(&c);
c1.PrintStuff();
}
基本上,假设container
始终以holder
定义inner
,这有助于在定义Container
时删除额外的模板参数。希望这可以帮助 :)
阿伦