を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
は常にとき、余分なテンプレートパラメータを取り除く役立つ、inner
の面でholder
を定義していることを想定していますContainer
を定義します。これが役に立ちますようお願いいたします。 arun
「奇妙な再帰テンプレートパターン」(CRTP)と呼ばれるものがありますか? http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern – Jimbo
この再帰的なデータ型は、リンクされたリストと区別するための新しい動作は何ですか? – abiessu
@abiessu、私の現在の使用は、実際には基数木です。各ノードには、次のノードに到達する方法のインデックスがあり、 'inner'はそのインデックスの戦略を指定するものです。つまり、テンプレートでは、固定赤黒、ハッシュ、またはその他の戦略とは対照的に、子供の管理方法を指定できます。 –