我试图从std :: function中找到函数的地址.
第一个解决方案是:
size_t getAddress(std::function<void (void)> function) {
typedef void (fnType)(void);
fnType ** fnPointer = function.target<fnType *>();
return (size_t) *fnPointer;
}
Run Code Online (Sandbox Code Playgroud)
但这只适用于带有(void())签名的函数,因为我需要签名为(void(Type&))的函数,我试图做
template<typename T>
size_t getAddress(std::function<void (T &)> function) {
typedef void (fnType)(T &);
fnType ** fnPointer = function.target<fnType *>();
return (size_t) *fnPointer;
}
Run Code Online (Sandbox Code Playgroud)
我得到"错误 - 预期"('用于函数式转换或类型构造"
更新:有没有办法捕获成员类地址?对于我正在使用的班级成员:
template<typename Clazz, typename Return, typename ...Arguments>
size_t getMemberAddress(std::function<Return (Clazz::*)(Arguments...)> & executor) {
typedef Return (Clazz::*fnType)(Arguments...);
fnType ** fnPointer = executor.template target<fnType *>();
if (fnPointer != nullptr) {
return (size_t) * fnPointer; …Run Code Online (Sandbox Code Playgroud) 有没有办法在Consumer表达式上访问方法的注释?
public void <T> addListener(Consumer<T> consumer)
{
consumer.getClass().getAnnotation(Handler.class); // Like this
}
@Handler
public void myListener(Integer x) {
}
addListener<Integer>(this::myListener);
Run Code Online (Sandbox Code Playgroud)