我不确定您为什么要添加Inner
类型模板参数,因为您要定义holder
为基于Container
and的类型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
。希望这会有所帮助:)