A tiny switcher for arbitrary types in C++11
While the idea is OK, this seems to add very little over a (unordered_)map of strings to functions (created directly). The client code is almost the same as your client code anyway:

int main() {
    typedef std::pair&lt;std::string, std::function&lt;void(void)&gt;&gt; pair;
    std::string s1("hi");
    std::string s2("dear");

    auto defaultFn = [](){ std::cout &lt;&lt; "Default "; };

    std::map&lt;std::string, std::function&lt;void(void)&gt;&gt; switcher{
        pair{"hi", [](){ std::cout &lt;&lt; "Hello "; } },
        pair{"dear", [](){ std::cout &lt;&lt; "World "; } },
    }

    switcher[s1]();
    switcher[s2]();

    switcher["hi"](); // not supported: chaining calls ("buddy")("?");

    if(!switcher.count("buddy"))
        defaultFn();
    else
        switcher["buddy"]();
    return 0;
}


The code is a bit bigger, and some syntactic sugar is missing (stuff that you added in your example, like chaining calls and multiple keys per entry) but the code is semantically the same.

My point to adding this code: your class only makes sense if you use lots of switches (on strings) in your code, and usually in OOP, if you do have big switches in your code, you should extract them as a hierarchy of classes (or a table of functions) anyway.