разрешение неопределенных ссылок xcb

Конечно, вам нужен пользовательский IEqualityComparer с Union. У меня есть тот, который действительно динамический, большой блок кода, входящий, хотя:

public class PropertyEqualityComparer<TObject, TProperty> 
    : IEqualityComparer<TObject>
{
    Func<TObject, TProperty> _selector;
    IEqualityComparer<TProperty> _internalComparer;
    public PropertyEqualityComparer(Func<TObject, TProperty> propertySelector,
        IEqualityComparer<TProperty> innerEqualityComparer = null)
    {
        _selector = propertySelector;
        _internalComparer = innerEqualityComparer;
    }
    public int GetHashCode(TObject obj)
    {
        return _selector(obj).GetHashCode();
    }
    public bool Equals(TObject x, TObject y)
    {
        IEqualityComparer<TProperty> comparer = 
            _internalComparer ?? EqualityComparer<TProperty>.Default;
        return comparer.Equals(_selector(x), _selector(y));
    }
}
public static class PropertyEqualityComparer
{
    public static PropertyEqualityComparer<TObject, TProperty>
        GetNew<TObject, TProperty>(Func<TObject, TProperty> propertySelector)
    { 
        return new PropertyEqualityComparer<TObject, TProperty>
            (propertySelector);
    }
    public static PropertyEqualityComparer<TObject, TProperty>
        GetNew<TObject, TProperty>
        (Func<TObject, TProperty> propertySelector, 
        IEqualityComparer<TProperty> comparer)
    { 
        return new PropertyEqualityComparer<TObject, TProperty>
            (propertySelector, comparer);
    }
}

Теперь вам нужно всего лишь позвонить в Союз с помощью этого компаратора равенства (созданного с помощью лямбда, который соответствует вашим обстоятельствам):

var tr = List1.Union(List2, PropertyEqualityComparer.GetNew(n => n.Id)).ToList();
0
задан willjp 23 February 2019 в 16:01
поделиться

2 ответа

Библиотеки xcb разделены на несколько разных пакетов; Получается, что вам нужно явно использовать библиотеки xcb и xcb-randr:

... `pkg-config --cflags --libs xcb xcb-randr`

Возможно, ваш дистрибутив Linux отдельно упаковывает библиотеку randr. Проверяя Fedora, он упаковывает и xcb, и xcb-rand в подпакет libxcb-devel; но возможно, что ваш дистрибутив Linux имеет отдельный подпакет libxcb-randr-devel, который вам нужно установить.

0
ответ дан Sam Varshavchik 23 February 2019 в 16:01
поделиться

Большое спасибо n.m. и G.M..

Я не связывал xcb-randr.

Решение:

clang++ main.cpp -o main `pkg-config --cflags --libs xcb` -lxcb-randr
0
ответ дан willjp 23 February 2019 в 16:01
поделиться