Вставьте элемент в карту библиотеки лимонного графа без копирования

Я использую библиотеку Lemon Graph и хочу добавить элемент на карту лимона без копирование или присвоение. Вот код:

#include <iostream>
#include <lemon/list_graph.h>
#include <lemon/maps.h>

using namespace lemon;
using namespace std;

typedef lemon::ListDigraph             LGraph;
typedef lemon::ListDigraph::Arc        LArc;
typedef lemon::ListDigraph::Node       LNode;

class MyNode {
public:
    CrossRefMap<LGraph, LArc, std::string> inputs;

    MyNode(const LGraph& graph) : inputs(graph) { }
};


int main(){
    LGraph graph;
    LGraph::NodeMap<MyNode> nodes(graph);

    LNode n = graph.addNode();
    nodes[n] = MyNode(graph); // error: object of type 'MyNode' cannot be assigned because its copy assignment operator is implicitly deleted

    return 0;
}

Основная проблема здесь заключается в том, что CrossRefMap требует инициализации в конструкторе и не имеет конструктора копирования или оператора присваивания. Вместо этого я мог бы использовать указатель на эту структуру, но это решение меня не удовлетворяет. Как я могу решить эту проблему? Любые предложения будут оценены. ;)


person remdezx    schedule 05.06.2013    source источник
comment
Как насчет предоставления конструктора перемещения или, возможно, определения какой-либо функции-члена swap и выполнения чего-то вроде MyNode(graph).swap(nodes[n])   -  person Tom Knapen    schedule 05.06.2013
comment
Это хорошая идея, но я только что заметил, что когда я добавляю конструктор перемещения в Node, мне также нужно добавить конструктор копирования;/ Lemon использует конструктор coy при инициализации карты. Так что я до сих пор не знаю, как вставить карту лимона в карту лимона таким образом.   -  person remdezx    schedule 07.06.2013
comment
Как насчет использования любой оболочки вокруг MyNode? Эта оболочка будет интеллектуальным указателем или reference_wrapper.   -  person Gonmator    schedule 17.07.2013
comment
А как насчет использования оператора присваивания перемещения MyNode& operator=(MyNode&&)?   -  person Gonmator    schedule 17.07.2013


Ответы (1)


Насколько я знаю, нет возможности сделать это со стандартными lemon картами, поэтому я реализовал свою на основе std::map. Я могу отслеживать изменения на графике и обновлять свою карту с помощью наблюдателей лимонного графика.

person remdezx    schedule 24.07.2013