#include <memory>
#include <sstream>
#include <string>

class MyClass {};

bool Post(std::string command, std::string payload) {return false;}
std::string Get(std::string command) { return ""; }
bool Delete(std::string command, std::string name) { return false;}
int OtherFunc(std::string command, bool enabled, const MyClass& name) {return 0;}

enum class CommandType
{
    Get, Post, Delete, OtherFunc
};


template<typename ... Ts>
typename std::enable_if<sizeof...(Ts) != 2, int>::type
Post (Ts&&...) {return 0;}

template<typename ... Ts>
typename std::enable_if<sizeof...(Ts) != 2, int>::type
Delete (Ts&&...) {return 0;}

template<typename ... Ts>
typename std::enable_if<sizeof...(Ts) != 3, int>::type
OtherFunc (Ts&&...) {return 0;}

template< typename... Params>
std::unique_ptr<std::stringstream> Execute(CommandType command, Params... parameters) {
    auto response = std::make_unique<std::stringstream>();
    if(command == CommandType::Get)
        *response << Get(parameters...);
    else if(command == CommandType::Post)
        *response << Post(parameters...);
    else if(command == CommandType::Delete)
        *response << Delete(parameters...);
    else if(command == CommandType::OtherFunc)
        *response << OtherFunc(parameters...);

    return response;
}


int main(){
    Execute(CommandType::Get, "hello");
}
