小编bob*_*bel的帖子

C++ 11:使用std :: function :: target()指向成员函数的指针

我知道这已经是一个长期讨论的话题,但我还没有找到满足我的答案.

简而言之:即使使用C++ 11的function :: target()功能,是不是可以将成员函数指针传递给c风格的方法?

以下代码不起作用:对mbf.target()的调用将返回0,从而生成SEGFAULT.我不明白为什么,因为我将成员函数绑定到泛型函数对象,所以类型应该没问题.

我做错了什么或者我想做一些不可能的事情?

#include <functional>
using namespace std;

typedef void (*CBType)(int, int);
CBType myCB = 0;

void regCallback(CBType cb)
{
    myCB = cb;
}

class A
{
public:
    void memberCB(int a, int b) {}

    void registerCallback()
    {
        auto mbMem = mem_fn(&A::memberCB);
        function<void(int,int)> mbf =
            bind(mbMem, *this, placeholders::_1, placeholders::_2);
        regCallback(*mbf.target<void(*)(int,int)>());
    }
};


int main()
{
    A inst;
    inst.registerCallback();
}
Run Code Online (Sandbox Code Playgroud)

c++ member-function-pointers function-pointers c++11

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

kubernetes client-go:将 labelselector 转换为标签字符串

在kubernetes客户去API(或其他图书馆使用它),是有一个实用功能的转换k8s.io/apimachinery/pkg/apis/meta/v1/LabelSelector为字符串,以填补该领域LabelSelectork8s.io/apimachinery/pkg/apis/meta/v1/ListOptions

client-go挖掘了代码,但我找不到这样的功能。

LabelSelector.Marshall()也不LabelSelector.String()给我说(毫不奇怪,因为这不是他们的目的,但我想也无妨)。

背景

我有类似的规范描述k8s.io/api/extensions/v1beta1/Deployment,并想使用它的一组选择器标签(即Selector字段)来查询它的 pod 使用

options := metav1.ListOptions{
    LabelSelector: <stringified labels>,
}

podList, err := clientset.CoreV1().Pods(<namespace>).List(options)
Run Code Online (Sandbox Code Playgroud)

go kubernetes kubernetes-go-client

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

Weld中的JavaEE CDI:通用事件?

我有一个基于泛型的特定事件处理的想法,但似乎Weld无法处理它们.我问谷歌但是找不到替代的CDI扩展.

问题:是否有CDI扩展,可以处理泛型类型事件的事件传播?

在下面我有明确的问题.

我有三个常规事件,EntityCreated,EntityChanged和EntityDeleted.它们的基类定义如下:

public abstract class DatabaseEvent<TargetType> {

    public TargetType target;

    public DatabaseEvent(TargetType target) {
        this.target = target;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后事件是简单的继承类:

public class EntityCreatedEvent<TargetType> extends DatabaseEvent<TargetType> {

    public EntityCreatedEvent(TargetType target) {
        super(target);
    }
}
Run Code Online (Sandbox Code Playgroud)

我像这样解雇他们:

public abstract class MyHome<EntityType> {

    private EntityType entity;

    @Inject
    Event<EntityCreatedEvent<EntityType>> entityCreatedEvent;

    public void fireCreatedEvent() {
        EntityCreatedEvent<EntityType> payload = new EntityCreatedEvent<EntityType>(entity);
        entityCreatedEvent.fire(payload);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想像这样观察它们:

public void handleProjectCreated(@Observes EntityCreatedEvent<Project> event) { ... }
Run Code Online (Sandbox Code Playgroud)

启动服务器时,Weld告诉我它无法处理泛型类型的事件.CDI的做法是使用额外的限定符而不是泛型来消除它们,例如:

public void handleProjectCreated(@Observes @ProjectEvent EntityCreatedEvent event) { ... }
Run Code Online (Sandbox Code Playgroud)

但是,我从该 …

generics events cdi java-ee-6 weld

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

在@FacesComponent中@Inject-ed值为null

我的印象是CDI没有使用具有@javax.faces.component.FacesComponent.的类.这是真的?

这是我的例子,这不起作用.将MyInjectableClass用于在在注射是没有问题的代码等穴位,所以它必须是有关@FacesComponent注释,我认为.

我要注入的课程:

@Named
@Stateful
public class MyInjectableClass implements Serializable {

    private static final long serialVersionUID = 4556482219775071397L;
}
Run Code Online (Sandbox Code Playgroud)

使用该类的组件;

@FacesComponent(value = "mycomponents.mytag")
public class MyComponent extends UIComponentBase implements Serializable {

    private static final long serialVersionUID = -5656806814384095309L;

    @Inject
    protected MyInjectableClass injectedInstance;


    @Override
    public void encodeBegin(FacesContext context) throws IOException {
        /* injectedInstance is null here */
    }
}
Run Code Online (Sandbox Code Playgroud)

jsf uicomponents java-ee cdi

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