33 lines
941 B
C++
33 lines
941 B
C++
#ifndef CALCULATOR_CHALLENGE_BINARYOPERATORFACTORY_HPP
|
|
#define CALCULATOR_CHALLENGE_BINARYOPERATORFACTORY_HPP
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <unordered_map>
|
|
|
|
#include "Operand.hpp"
|
|
|
|
template<typename T>
|
|
class BinaryOperatorFactory
|
|
{
|
|
using Operator = BinaryOperatorType<T>;
|
|
|
|
public:
|
|
BinaryOperatorFactory() noexcept;
|
|
BinaryOperatorFactory(const BinaryOperatorFactory&) noexcept = delete;
|
|
BinaryOperatorFactory(BinaryOperatorFactory&&) noexcept = delete;
|
|
auto operator=(const BinaryOperatorFactory&) noexcept -> BinaryOperatorFactory& = delete;
|
|
auto operator=(BinaryOperatorFactory&&) noexcept -> BinaryOperatorFactory& = delete;
|
|
~BinaryOperatorFactory() noexcept = default;
|
|
|
|
auto make(std::string_view text) noexcept -> std::optional<Operator>;
|
|
|
|
private:
|
|
std::unordered_map<std::string, Operator> _binary_operations;
|
|
};
|
|
|
|
#include "BinaryOperatorFactory.tcc"
|
|
|
|
#endif
|