小编Agu*_*rez的帖子

C++试图从std :: function获取函数地址

我试图从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)

c++ pointers function std

13
推荐指数
2
解决办法
9895
查看次数

Java 8:获取Consumer <?>底层函数注释

有没有办法在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)

java lambda java-8

1
推荐指数
1
解决办法
244
查看次数

标签 统计

c++ ×1

function ×1

java ×1

java-8 ×1

lambda ×1

pointers ×1

std ×1