URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9465
[ Назад ]

Исходное сообщение
"std bitmap for user defined classes"

Отправлено handler2006 , 23-Май-12 13:55 
Здравствуйте!
Вопрос немного философский, и, скорее всего, практического применения не имеет.
Итак.
Нашел конструкцию своппинга при помощи битовых операторов:

a^=b^=a^=b

Данная конструкция работает для встроенных типов, а вот как можно ее применить к типам данных , определяемых пользователем?
В документации описаны примеры создания битовых наборов только для числовых типов данных и стрингов, причем, последние должны содержать в себе только символы 0 и 1.


int a = 42;
double b = 3.14
std::string c = "1001";
std::string d = "123";
std::bitset<2> _a(a); // OK
std::bitset<2> _b(b); // OK
std::bitset<2> _c(c); // OK
std::bitset<2> _d(d); // Error

А вот так нельзя:


class A {...};
std::bitset<2> _a(a); // Error

Или все-таки можно?


Содержание

Сообщения в этом обсуждении
"std bitmap for user defined classes"
Отправлено deadmustdie , 24-Май-12 12:19 
class A {

...

operator std::string() {
  return std::string(...);
}

};


"std bitmap for user defined classes"
Отправлено handler2006 , 24-Май-12 16:10 
Простите, не совсем понял идею

"std bitmap for user defined classes"
Отправлено deadmustdie , 24-Май-12 16:13 
> Простите, не совсем понял идею

Битовая маска формируется из строки, состоящей из ноликов и единиц, путем установки соответствующих битов в маске.

Пользовательский класс может содержать оператор преобразования себя в строку, состоящую из ноликов и единиц, для обеспечения формирования битовой маски из данной строки. Логика формирования такой строки - целиком пользовательская (как и класс).

Естественно, аналогично можно написать метод, заполняющий битовую маску на основе данных класса. Объем ручной работы примерно одинаков в обоих случаях.