Zweiter Schritt: Kopieren von Bäumen und Knoten besuchen

Ok, wir machen eigentlich zwei Schritte:

Ein Test-Programm das eigene Visit-Funktionen implementiert könnte so aussehen:

#include "trie.hpp"
#include <iostream>

template <typename Object>
struct Visitor
{
    void
    operator()(const Object &object) const
    {
        std::cout << "visit object:" << object << std::endl;
    }
};

template <typename Object>
void
visit(const Object &object)
{
    std::cout << "visit function:" << object << std::endl;
}

int
main()
{
    Trie<double>    trie_;

    trie_.insert("Lehn"42);
    trie_.insert("Fo"123);
    trie_.insert("Lehr"666);
    trie_.insert("Lehr"667);
    trie_.insert("Lehr"668);

    Trie<double>    trie;

    trie = trie_;

    std::cout << "visiting:" << std::endl;
    trie.visit("Le", Visitor<double>());
    std::cout << "visiting:" << std::endl;
    trie.visit("", Visitor<double>());
    trie.visit("", visit<double>);
}

Übersetzt man dies und führt man dies aus enthält man:

$shell> g++ -Wall -std=c++14 testit.cpp
$shell> ./a.out
Remove old object!
Remove old object!
visiting:
visit object:42
visit object:668
visiting:
visit object:123
visit object:42
visit object:668
visit function:123
visit function:42
visit function:668
$shell>