Structs can store enum values alongside other fields.

enum field An enum field records a named category inside a larger object.

Enum With Structs

priority
enum_with_structs.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>

enum class Priority {
    Low,
    Medium,
    High
};

struct Ticket {
    std::string title;
    Priority priority;
};

int points(Priority priority) {
    if (priority == Priority::High) {
        return 3;
    }
    if (priority == Priority::Medium) {
        return 2;
    }
    return 1;
}

int main() {
    Priority priority = Priority::Medium;

    Ticket ticket{"login bug", priority};

    std::cout << "title=" << ticket.title << std::endl;
    std::cout << "points=" << points(ticket.priority) << std::endl;
    return 0;
}
#include <iostream>
#include <string>

enum class Priority {
    Low,
    Medium,
    High
};

struct Ticket {
    std::string title;
    Priority priority;
};

int points(Priority priority) {
    if (priority == Priority::High) {
        return 3;
    }
    if (priority == Priority::Medium) {
        return 2;
    }
    return 1;
}

int main() {
    Priority priority = Priority::Low;

    Ticket ticket{"login bug", priority};

    std::cout << "title=" << ticket.title << std::endl;
    std::cout << "points=" << points(ticket.priority) << std::endl;
    return 0;
}
#include <iostream>
#include <string>

enum class Priority {
    Low,
    Medium,
    High
};

struct Ticket {
    std::string title;
    Priority priority;
};

int points(Priority priority) {
    if (priority == Priority::High) {
        return 3;
    }
    if (priority == Priority::Medium) {
        return 2;
    }
    return 1;
}

int main() {
    Priority priority = Priority::High;

    Ticket ticket{"login bug", priority};

    std::cout << "title=" << ticket.title << std::endl;
    std::cout << "points=" << points(ticket.priority) << std::endl;
    return 0;
}
  1. priority ← 1, ticket ← (empty)

    25int main() {26    Priority priority→ 1 = Priority::Medium; //@priority=Priority::Low, Priority::High2728    Ticket ticket→ (empty){"login bug", priority1};2930    std::cout << "title=" << ticket(empty).title << std::endl;31    std::cout << "points=" << points(ticket(empty).priority) << std::endl;32    return 0;
    outputtitle=login bug
  2. int points(Priority priority)

    15int points(Priority priority1) {16    if (priority == Priority::High) {
  3. if (priority == Priority::Medium)

    18}19if (priority1 == Priority::Medium) {20    return 2;21}
  4. std::cout << "points=" << points(ticket.priority) << std::endl;

    30    std::cout << "title=" << ticket.title << std::endl;31    std::cout << "points=" << points(ticket(empty).priority) << std::endl;32    return 0;33}
    outputpoints=2
  1. priority ← 0, ticket ← (empty)

    25int main() {26    Priority priority→ 0 = Priority::Low;2728    Ticket ticket→ (empty){"login bug", priority0};2930    std::cout << "title=" << ticket(empty).title << std::endl;31    std::cout << "points=" << points(ticket(empty).priority) << std::endl;32    return 0;
    outputtitle=login bug
  2. int points(Priority priority)

    15int points(Priority priority0) {16    if (priority == Priority::High) {17        return 3;18    }19    if (priority == Priority::Medium) {20        return 2;21    }22    return 1;23}
  3. std::cout << "points=" << points(ticket.priority) << std::endl;

    30    std::cout << "title=" << ticket.title << std::endl;31    std::cout << "points=" << points(ticket(empty).priority) << std::endl;32    return 0;33}
    outputpoints=1
  1. priority ← 2, ticket ← (empty)

    25int main() {26    Priority priority→ 2 = Priority::High;2728    Ticket ticket→ (empty){"login bug", priority2};2930    std::cout << "title=" << ticket(empty).title << std::endl;31    std::cout << "points=" << points(ticket(empty).priority) << std::endl;32    return 0;
    outputtitle=login bug
  2. int points(Priority priority)

    15int points(Priority priority2) {16    if (priority == Priority::High) {
  3. if (priority == Priority::High)

    15int points(Priority priority) {16    if (priority2 == Priority::High) {17        return 3;18    }
  4. std::cout << "points=" << points(ticket.priority) << std::endl;

    30    std::cout << "title=" << ticket.title << std::endl;31    std::cout << "points=" << points(ticket(empty).priority) << std::endl;32    return 0;33}
    outputpoints=3