7 #ifndef _FCITX_ADDONINSTANCE_DETAILS_H_ 8 #define _FCITX_ADDONINSTANCE_DETAILS_H_ 17 class AddonInstancePrivate;
23 template <
typename Sig>
26 template <
typename Ret,
typename... Args>
30 virtual Ret callback(Args... args) = 0;
36 template <
typename Signature>
37 using AddonFunctionSignatureType =
40 template <
typename Signature>
41 using AddonFunctionSignatureReturnType =
42 typename std::function<AddonFunctionSignatureType<Signature>>::result_type;
44 template <
typename CallbackType>
47 template <
typename Class,
typename Ret,
typename... Args>
51 typedef Ret (Class::*CallbackType)(Args...);
52 typedef Ret Signature(Args...);
55 CallbackType pCallback)
57 pCallback_(pCallback) {
58 addon->registerCallback(name,
this);
61 Ret callback(Args... args)
override {
62 return (addon_->*pCallback_)(std::forward<Args>(args)...);
67 CallbackType pCallback_;
70 template <
typename Class,
typename Ret,
typename... Args>
74 typedef Ret (Class::*CallbackType)(Args...)
const;
75 typedef Ret Signature(Args...);
78 CallbackType pCallback)
80 pCallback_(pCallback) {
81 addon->registerCallback(name,
this);
84 Ret callback(Args... args)
override {
85 return (addon_->*pCallback_)(std::forward<Args>(args)...);
90 CallbackType pCallback_;
93 template <
typename CallbackType>
95 MakeAddonFunctionAdaptor(CallbackType pCallback);
99 #endif // _FCITX_ADDONINSTANCE_DETAILS_H_