class Potentiometer {
public:
Potentiometer(uint8_t value) : value(value) {}
void printValue() {
Serial.print(value);
}
private:
uint8_t value;
};
template <typename... Args>
class PotArray {
public:
PotArray(Args... args) {
size = sizeof...(args);
potentiometers = (Potentiometer*)malloc(size * sizeof(Potentiometer));
fillArray(0, args...);
}
void printValues() {
for (int i = 0; i < size; ++i) {
potentiometers[i].printValue();
Serial.write(i == size - 1 ? '\n' : ' ');
}
}
~PotArray() {
free(potentiometers);
}
private:
template <typename T>
void fillArray(int index, T value) {
potentiometers[index] = Potentiometer(value);
}
template <typename T, typename... Rest>
void fillArray(int index, T value, Rest... rest) {
potentiometers[index] = Potentiometer(value);
fillArray(index + 1, rest...);
}
Potentiometer* potentiometers;
int size;
};
template <typename... Args>
PotArray<Args...> makePotArray(Args... args) {
return PotArray<Args...>(args...);
}
auto allPotentiometers = makePotArray(A0, A1, A2, A3, A4, A5);
void setup() {
Serial.begin(9600);
allPotentiometers.printValues();
}
void loop() {}