135. Generic Sensor Pair

#include <iostream>
#include <iomanip>
#include <string>

template <typename T_Value, typename T_Meta>
class SensorPair {
public:
    T_Value value;
    T_Meta metadata;

    SensorPair(T_Value v, T_Meta m) : value(v), metadata(m) {}

    void print() {
        std::cout << "Pair: " << value << " | " << metadata << std::endl;
    }
};

int main() {
    int N;
    if (!(std::cin >> N)) return 0;

    std::cout << std::fixed << std::setprecision(2);

    for (int i = 0; i < N; ++i) {
        std::string type;
        std::cin >> type;

        if (type == "f-i") {
            float v; int m;
            std::cin >> v >> m;
            SensorPair<float, int> p(v, m);
            p.print();
        } else if (type == "i-c") {
            int v; char m;
            std::cin >> v >> m;
            SensorPair<int, char> p(v, m);
            p.print();
        } else if (type == "i-i") {
            int v; int m;
            std::cin >> v >> m;
            SensorPair<int, int> p(v, m);
            p.print();
        }
    }
    return 0;
}

Explanation & Logic Summary:

  • Uses class templates with two type parameters
  • Eliminates duplicated struct definitions
  • Demonstrates compile-time type specialization
  • No runtime overhead or dynamic allocation
  • Output formatting handled via standard I/O manipulators

Firmware Skill Relevance:

  • Models heterogeneous telemetry data
  • Reflects real-world sensor + metadata pairing
  • Reinforces zero-overhead abstractions
  • Encourages reusable, type-safe firmware design patterns

 

 

 

 

 

Loading...

Input

3 f-i 25.5 1001 i-c 1 E i-i 4095 1

Expected Output

Pair: 25.50 | 1001 Pair: 1 | E Pair: 4095 | 1