c++17
std::invoke
#include <iostream>
#include <functional>
using namespace std;
class MyClass {
public:
int memberVariable = 10;
void memberFunction(int a, int b) {
std::cout << "Member function called! a:" << a << " b:" << b << std::endl;
}
};
int main() {
MyClass obj;
void (MyClass::*funcPtr)(int,int) = &MyClass::memberFunction;
std::invoke(funcPtr, obj,10,20);
int MyClass::*v = &MyClass::memberVariable;
int value = std::invoke(v, obj);
std::cout << "Value: " << value << std::endl;
return 0;
}
#include <iostream>
enum TYPE{A = 1, B = 2, C = 3, D = 4, E = 5 };
template<typename... Args>
constexpr qlonglong mergeType(Args... args)
{
qlonglong ret = 0;
((ret = (ret << 4) | args), ...);
return ret;
}
int main() {
auto num = mergeType(A, B, C, D, E);
do {
std::cout << "type=" << (num & 0xF) <<std::endl;
} while(num >>= 4);
}