Решение этой конкретной проблемы C ++ diamond для классов Qt

Как уже указывалось, вы пытаетесь создать реляционную базу данных из какой-либо реляционной базы данных, которую вы действительно не хотите делать, но в любом случае, если у вас есть случай, когда вы должны это сделать, это решение, которое вы можете использовать , Сначала мы делаем поиск foreach в коллекции A (или в вашем случае пользователей), и затем мы получаем каждый элемент как объект, тогда мы используем свойство объекта (в вашем случае uid) для поиска в нашей второй коллекции (в ваших комментариях к случаю), если мы может найти его, тогда у нас есть совпадение, и мы можем печатать или что-то делать с ним. Надеюсь, это поможет вам и удачи:)

db.users.find().forEach(
function (object) {
    var commonInBoth=db.comments.findOne({ "uid": object.uid} );
    if (commonInBoth != null) {
        printjson(commonInBoth) ;
        printjson(object) ;
    }else {
        // did not match so we don't care in this case
    }
});
0
задан Lucas Zanella 17 March 2019 в 19:46
поделиться

1 ответ

Это невозможно.

Я думал об использовании CRTP (Curious Recurring Template Pattern), который теоретически можно использовать, если вы можете изменить один из классов и справиться с его ограничениями. Но в вашем случае это не сработает, поскольку ReactItem не является производным напрямую от QQuickItem, а от QQuickPaintedItem.

Предположим, что это не так:

ReactItem нужно изменить, чтобы он выглядел так:

template <class T> class ReactItem : public T {/*...*/};

Класс hiearchy будет выглядеть так: ]

Ограничения этого подхода в том, что два экземпляра ReactItem являются несвязанными типами в отношении иерархии типов. Это означает, что большая часть кода, ранее ссылающегося на ReactItem, может нуждаться в изменении.

Это довольно легко сделать для функций:

void f(ReactItem* item) { item->setVisible(true); }
// becomes
template<class T> void f(ReactItem<T>* item)  { item->setVisible(true); }

Это намного сложнее для шаблонных элементов данных, таких как std::vector<ReactItem*>.

0
ответ дан smerlin 17 March 2019 в 19:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: