#include <functional>
#include <iostream>
#include <array>

//We cannot touch this class
class Button
{
public:
	virtual void onClick()
	{

	}
};

void click_button(Button& button)
{
	button.onClick();
}

class CustomButton: public Button
{
	const std::function<void(void)> callback;
public:
	CustomButton(std::function<void(void)> cb) : callback(std::move(cb)) {}

	virtual void onClick() override
	{
		callback();
	}
};

void meow() {std::cout << "meow";}
void beep() {std::cout << "beep";}
void clack() {std::cout << "clack";}

int main()
{
	std::array<CustomButton, 3> buttons {{{meow}, {beep}, {clack}}};
	std::cout << "Which button do you want to press? (1-3)\n";
	int i;
	std::cin >> i;
	std::cout << "Button " << i << ' ';
	click_button(buttons[i-1]);
	std::cout << "'s\n";
}