Я использую библиотеку 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 требует инициализации в конструкторе и не имеет конструктора копирования или оператора присваивания. Вместо этого я мог бы использовать указатель на эту структуру, но это решение меня не удовлетворяет. Как я могу решить эту проблему? Любые предложения будут оценены. ;)
MyNode(graph).swap(nodes[n])
- person Tom Knapen   schedule 05.06.2013MyNode
? Эта оболочка будет интеллектуальным указателем илиreference_wrapper
. - person Gonmator   schedule 17.07.2013MyNode& operator=(MyNode&&)
? - person Gonmator   schedule 17.07.2013