#include <iostream>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <functional>
using namespace std;
#define HAS_MEMBER(member)\
template<typename T,typename... Args>\
struct HAS_MEMBER_##member\
{\
private:\
template<typename U> static auto Check(int)->decltype(std::declval<U>().member(std::declval<Args>()...),std::true_type());\
template<typename U> static auto Check(...)->decltype(std::false_type());\
public:\
static const bool value=std::is_same<decltype(Check<T>(0)),std::true_type>::value;\
};\
HAS_MEMBER(Before);
HAS_MEMBER(After);
template<typename Func,typename... Args>
struct Aspect {
public:
Aspect(Func&& f) :m_func(std::forward<Func>(f)) {}
template<typename T>
typename std::enable_if<HAS_MEMBER_Before<T, Args...>::value && HAS_MEMBER_After<T, Args...>::value>::type Invoke(Args&&
c++简易AOP框架
最新推荐文章于 2024-09-05 21:12:47 发布