2010-09-22 3 views
2

Я использую визуальный отладчик в своем приложении, используя другой бит исходного кода. Я столкнулся с проблемой, когда я наткнулся на них с помощью этого ..Что использовать для массива struct typedef в C++

struct DebugVertex 
{ 
    gkVector3 v; 
    unsigned int color; 
}; 


typedef utArray<DebugVertex> Buffer; 

Я нашел бесплатную библиотеку, что они используют для utArray, однако я хотел бы придерживаться с включенными библиотеками, когда это возможно (это, кажется, как они используются внешние библиотеки просто вызывают). Вот как выглядит определение utArray ...

template <typename T> 
class utArray 
{ 
public: 
    typedef T   *Pointer; 
    typedef const T  *ConstPointer; 

    typedef T   ValueType; 
    typedef const T  ConstValueType; 

    typedef T   &ReferenceType; 
    typedef const T  &ConstReferenceType; 

    typedef utArrayIterator<utArray<T> >  Iterator; 
    typedef const utArrayIterator<utArray<T> > ConstIterator; 

public: 
    utArray() : m_size(0), m_capacity(0), m_data(0), m_cache(0) {} 

    utArray(const utArray<T>& o) 
     : m_size(o.size()), m_capacity(0), m_data(0), m_cache(0) 
    { 
     reserve(m_size); 
     copy(m_data, o.m_data, m_size); 
    } 

Есть ли что-нибудь подобное, что я могу использовать? Я не испытываю определенного типа, основанного на массиве struct, поэтому любая помощь будет оценена.

+1

Добро пожаловать в SO. Спасибо, что нашли время, чтобы отформатировать ваш вопрос. – John

+0

Не проблема, у меня есть учетная запись, но я не могу вспомнить свою информацию. Хотел отметить, что я знаю, что я включил лишь небольшую часть определения, просто надеясь, что кто-то узнает его и узнает, что можно использовать на своем месте. –

+1

Было бы полезно посмотреть, что такое 'm_cache'. Кроме того, он очень похож на стандартный std :: vector', стандартный динамический массив. –

ответ

0

Из всех стандартных контейнеров STL последовательности вероятно vectordeque & находятся ближе всего к массиву (по крайней мере для меня, я связываю случайный доступ с массивами ...).

Единственная проблема, с которой вы столкнулись, заключается в том, что контейнеры STL имеют разные соглашения об именах для внутренних typedefs, таких как: iterator, pointer, value type & и так далее. Если вам действительно нравится набирать Buffer::Iterator вместо Buffer::iterator, тогда вам понадобится тип прокси по типу STL по вашему выбору. Что-то вроде:

#include <vector> 

template <typename T> 
class utArray 
{ 
private: 
    typedef std::vector<T>        InnerContainer; 
    InnerContainer          m_innerContainer; 

public: 
    typedef typename InnerContainer::pointer   Pointer; 
    typedef typename const InnerContainer::pointer  ConstPointer; 

    typedef typename InnerContainer::value_type  ValueType; 
    typedef const typename InnerContainer::value_type ConstValueType; 

    typedef typename InnerContainer::reference   ReferenceType; 
    typedef typename InnerContainer::const_reference ConstReferenceType; 

    typedef typename InnerContainer::iterator   Iterator; 
    typedef typename InnerContainer::const_iterator ConstIterator; 

public: 
    utArray() {} 

    utArray(const utArray<T>& o) 
     : m_innerContainer(o.m_innerContainer) 
    { 
    } 
}; 
+0

Спасибо, это было прекрасно –

1

Это выглядит очень похож на станд :: вектор ко мне ... (#include <vector>)

+0

Упреждающее фиксированное форматирование для вас. (Извините, если это было неприятно.) – asveikau

+0

lol совсем нет. Я делаю это все время :) – Goz

Смежные вопросы