Здравствуйте!
Вопрос немного философский, и, скорее всего, практического применения не имеет.
Итак.
Нашел конструкцию своппинга при помощи битовых операторов:
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Или все-таки можно?
class A {...
operator std::string() {
return std::string(...);
}};
Простите, не совсем понял идею
> Простите, не совсем понял идеюБитовая маска формируется из строки, состоящей из ноликов и единиц, путем установки соответствующих битов в маске.
Пользовательский класс может содержать оператор преобразования себя в строку, состоящую из ноликов и единиц, для обеспечения формирования битовой маски из данной строки. Логика формирования такой строки - целиком пользовательская (как и класс).
Естественно, аналогично можно написать метод, заполняющий битовую маску на основе данных класса. Объем ручной работы примерно одинаков в обоих случаях.