#include<iostream>
#include<functional>
#include <unordered_set>
#include <vector>
#include <unordered_map>
#include <variant>
class Button
{
public:
Button(int _val):val(_val){}
~Button();
int val;
template<typename F, typename...InArgs>
void addListener(std::function<F(InArgs...)>(f), InArgs... args) {
listener.push_back(f(args...));
}
template<typename F, typename...InArgs>
void callMethod(std::function<F(InArgs...)>(f), InArgs... args) {
f(args...);
}
void print() { std::cout << "Button value -> " << val << std::endl; }
private:
template<typename F,typename...InArgs>
static std::vector<std::function<F(InArgs...)>> listener;
};
inline void test1() {
std::cout << "Printing test1 method...\n";
}
inline void test2(Button* b) {
std::cout << "Button value is …
Run Code Online (Sandbox Code Playgroud)