Преобразование типов c++

Имеется следующий класс:

class C final {
public:
//Публичные функции, геттеры и сеттеры
private:
uint8_t a;
uint8_t b;
};

Его необходимо преобразовать в тип std::pair<uint8_t, uint8_t>. Можно написать функцию-конвертер:

#include <utility>
std::pair<uint8_t, uint8_t> convertToPair(const C& obj) {
    return {obj.getA(), obj.getB()}; // Создаем пару на основе значений структуры
}

Но есть ли более элегантный способ каста?


Ответы (1 шт):

Автор решения: Harry

Такое устроит?

class C final {
public:
    C(uint8_t a, uint8_t b):a(a),b(b){}
    operator std::pair<uint8_t, uint8_t>()
    {
        return std::make_pair(a,b);
    }
private:
uint8_t a;
uint8_t b;
};

int main(int argc, char * argv[])
{
    C c(5,7);
    pair<uint8_t, uint8_t> d = c;

    cout << int(d.first) << "  " << int(d.second) << endl;

    cout << static_cast<pair<uint8_t, uint8_t>>(c).first << "  " <<
            static_cast<pair<uint8_t, uint8_t>>(c).second << endl;

}
→ Ссылка