Policy Calculation
Programming
This program demonstrates a simpler example of policy-based design, where a calculator class uses different operation policies (addition, multiplication) to perform calculations.
Implementation
#include <iostream>
// Math operation policies
struct AddOperation {
static int compute(int a, int b) {
return a + b;
}
};
struct MultiplyOperation {
static int compute(int a, int b) {
return a * b;
}
};
// Calculator class using a policy
template <typename OperationPolicy>
class Calculator : public OperationPolicy {
public:
static int calculate(int a, int b) {
return OperationPolicy::compute(a, b);
}
};
int main() {
// Using AddOperation policy
int sum = Calculator<AddOperation>::calculate(5, 3);
std::cout << "Addition result: " << sum << std::endl;
// Using MultiplyOperation policy
int product = Calculator<MultiplyOperation>::calculate(5, 3);
std::cout << "Multiplication result: " << product << std::endl;
return 0;
} Key Concepts
- Policy Class: A class that defines a specific behavior (e.g.,
AddOperation,MultiplyOperation) - Template Parameter: The policy is passed as a template parameter
- Static Methods: Policies use static methods for stateless operations
- Different policies can be swapped at compile time without changing the calculator code
Output
Addition result: 8
Multiplication result: 15