1

私はこのような構造を持っています:

フー。

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 の各配列が満たされると、いわばリンクされたリストのように機能しますが、それはより連鎖的な効果です。このインスタンスの現在の状態を保存することに行き詰まっています。

4

0 に答える 0