vector<bool>
От: Шебеко Евгений  
Дата: 13.10.04 17:18
Оценка:
Наткнулся на специализацию bool

Есть какая-то альтернатива ему?


Проблема в том что мне нужен именно такой контейнер но без специализации.
Для разных типов.
Т.е. мне нужно получать ссылку на объект, Желательно наличее reserve().
Желательно чтобы память там выделялась по такой же стратегии.
Желательно чтобы была какая-то оптимизация внутри, основанная на type_traits. (вроде в vector<> такая есть)

valarray у меня пока не сложилось,
во первых там нет reserve(),
во-вторых он почему-то возвращает объект вместо константной ссылки, а мне хочется именно ссылку.

Кстати кто из них менее жёстко относится к проверке ошибок?
Re: vector<bool>
От: korzhik Россия  
Дата: 13.10.04 19:18
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>Наткнулся на специализацию bool

ШЕ>Есть какая-то альтернатива ему?

typedef char bool_t;
std::vector<bool_t> arr;

подходит?
Re[2]: vector<bool>
От: Аноним  
Дата: 14.10.04 06:52
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, Шебеко Евгений, Вы писали:


ШЕ>>Наткнулся на специализацию bool

ШЕ>>Есть какая-то альтернатива ему?

K>
K>typedef char bool_t;
K>std::vector<bool_t> arr;
K>

K>подходит?

В данном случае нежелательно.
Re[3]: vector<bool>
От: korzhik Россия  
Дата: 14.10.04 07:11
Оценка: +1
Здравствуйте, Аноним, Вы писали:

K>>
K>>typedef char bool_t;
K>>std::vector<bool_t> arr;
K>>

K>>подходит?

А>В данном случае нежелательно.


я бы тебе ещё предложил std::deque<bool>, но там нет reserve
скорей всего надо искать не в std
Re: vector<bool>
От: Lorenzo_LAMAS  
Дата: 14.10.04 07:18
Оценка:
Если ты используешь VC 6.0 и старую динкумваровскую библиотеку, то все так, как тебе хочется — ты используешь НЕ специализацию, VC 6.0 не поддерживает частичных специализаций и чтоб использовать специализированный vector<bool> нужно еще и второй параметр (точно не помню) вроде std::allocator<unsigned char> явно указывать
Of course, the code must be complete enough to compile and link.
Re[4]: vector<bool>
От: Аноним  
Дата: 14.10.04 07:24
Оценка:
Короче всё решилось так, тоже не слишком изящно, но всё же.
Наверное теряется некоторая оптимизация, чем то надо жертвовать.
Слеплено в кучу, но идея понятна.

template<class T>
struct field_data_inside_type
{
    typedef typename T type;
};

template<class T>
struct type_wrapper
{
    T val;
    type_wrapper(){}
    type_wrapper(const T& rhs) : val(rhs){}
    type_wrapper(const type_wrapper<T>& rhs) : val(rhs.val){}
    void operator=(const T& rhs){val=rhs;}
    void operator=(const type_wrapper<T>& rhs){val=rhs.val;}
    operator T& (){return val;}
    operator const T& () const{return val;}
};

template<>
struct field_data_inside_type<bool>
{
    typedef type_wrapper<bool> type;
};


template<class T>
class field_data_impl : public field_data
{
public:
    typedef field_data base_t;
    typedef typename field_data_inside_type<T>::type data_item_t;
    typedef typename std::vector<data_item_t> data_t;
private:
...
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.