私はこのような構造を持っています:
フー。
template<class T>
class Foo {
public:
// Public For Now While Constructing Class
std::shared_ptr<T> m_p256[256];
private:
static unsigned m_elementCount;
std::vector<std::shared_ptr<Foo<T>>> m_foos;
public:
Foo();
~Foo();
void add( T object );
}; // Foo
Foo.inl
template<class T>
unsigned Foo<T>::m_elementCount = 0;
template<class T>
Foo<T>::Foo() :
m_p256{ nullptr } {
} // Foo
template<class T>
Foo<T>::~Foo() {
} // ~Foo
template<class T>
void Foo<T>::add( T obj ) {
m_elementCount++;
if ( m_elementCount == 256 ) {
// Save Current Instance To Our Vector
// Here Is Where I've Tried Several Things And Where I'm Currently Stuck
m_foos.push_back( a shared_ptr of this instance );
// Reset Element Count
m_elementCount = 0;
Foo<T>* fooPtr = new Foo<T>();
fooPtr->add( obj );
} else {
std::shared_ptr<T> pT( new T( obj ) );
m_p256[m_elementCount-1] = pT;
}
} // add
基本的に私がやろうとしているのは、 add 関数を使用して同じタイプの任意のオブジェクトを渡すことです。要素数が 256 要素に達し、渡されたその型のスマート ポインターの内部配列がいっぱいになったら、このクラスのインスタンス化されたオブジェクトの現在のインスタンスを保存し、それをベクターにプッシュし、渡される次のオブジェクトは新しいオブジェクトに属します。または次のインスタンスが作成されますが、それ以降のすべてのインスタンスは依然として元のオブジェクトの一部です。したがって、256 の各配列が満たされると、いわばリンクされたリストのように機能しますが、それはより連鎖的な効果です。このインスタンスの現在の状態を保存することに行き詰まっています。