Это интересная проблема.
Если вам нужно что-то, что было бы std :: vector, если бы оно не было специализированным, то, возможно, что-то подобное будет работать в вашем случае:
#include <vector>
#include <iostream>
#include <algorithm>
class Bool
{
public:
Bool(): m_value(){}
Bool( bool value ) : m_value(value){}
operator bool() const { return m_value;}
// the following operators are to allow bool* b = &v[0]; (v is a vector here).
bool* operator& () { return &m_value; }
const bool * const operator& () const { return &m_value; }
private:
bool m_value;
};
int main()
{
std::vector<Bool> working_solution(10, false);
working_solution[5] = true;
working_solution[7] = true;
for( int i = 0; i < working_solution.size(); ++i )
{
std::cout<< "Id " << i << " = " << working_solution[i] << "(" <<(working_solution[i] ? "true" : "false") << ")" <<std::endl; // i used ? : to be sure the boolean evaluation is correct
}
std::sort( working_solution.begin(), working_solution.end());
std::cout<< "--- SORTED! ---" << std::endl;
for( int i = 0; i < working_solution.size(); ++i )
{
bool* b = &working_solution[i]; // this works!
std::cout<< "Id " << i << " = " << working_solution[i] << "(" << (working_solution[i] ? "true" : "false") << ")" <<std::endl; // i used ? : to be sure the boolean evaluation is correct
}
std::cin.get();
return 0;
}
Я пробовал это с VC9, и, кажется, работает нормально. Идея класса Bool состоит в том, чтобы моделировать тип bool, предоставляя такое же поведение и размер (но не один и тот же тип). Почти вся работа выполняется оператором bool и конструкторами копирования по умолчанию.
Я добавил сортировку, чтобы убедиться, что она реагирует так, как предполагалось при использовании алгоритмов.
Не уверен, что это подойдет для всех случаев. Если это подходит для ваших нужд, это будет меньше работы, чем переписать вектороподобный класс ...