Portál AbcLinuxu, 6. listopadu 2025 13:43
Řešení dotazu:
typedef int (*funkce_t)();
struct {
char *jmeno;
funkce_t funkce;
} seznam[] = {
{
"haf", stekej,
},
};
a nasledne prochazet tohle a volat podle toho... je to teda spis C nez C++, ale hadam ze se to az tak lisit nebude (C++ se mozna nebude libit to deklarovani a definovani struktury i promenne v jednom)
std::map<std::string, void*>
std::map nebývá hašovací tabulka. std::unordered_map bývá.
void*No klidně bych tam spíš rval std::function<void()>, může to pak být i volání nějaký metody nějakýho objektu, lambda, ...
#include <iostream>
#include <map>
#include <unordered_map>
#include <functional>
#include <string>
void stekej()
{
std::cout << "haf" << std::endl;
}
void mnoukej()
{
std::cout << "mňau" << std::endl;
}
class Jardik
{
public:
void jardikuj(std::string const& oCem)
{
std::cout << "Jardíkuju o " << oCem << std::endl;
}
};
using Mapa = std::unordered_map<std::string, std::function<void()>>;
//using Mapa = std::map<std::string, std::function<void()>>;
int main(int argc, char **argv)
{
Jardik jardik;
Mapa mapa{
{"haf", stekej},
{"mňau", mnoukej},
{"jardikujo64bitech", std::bind(&Jardik::jardikuj, &jardik, "64bitech")},
{"jardikujowindows", std::bind(&Jardik::jardikuj, &jardik, "woknech")}
};
std::string codelat;
for (;;)
{
std::cin >> codelat;
if (!std::cin)
break;
Mapa::const_iterator it = mapa.find(codelat);
if (it != mapa.end()) {
it->second();
}
else {
std::cout << "Neumim" << std::endl;
}
}
return 0;
}

gcc 4.7 a 4.8 dle distrowatch ...
http://distrowatch.com/search.php?pkg=gcc&pkgver=4.8#pkgsearch
http://distrowatch.com/search.php?pkg=gcc&pkgver=4.7#pkgsearch
a c11 v clangu : http://clang.llvm.org/cxx_status.html
using, pokud se opraví na typedef a přidá se flag -std=gnu++0x uklidňujícně označený jako „This support is currently experimental.“ tak už jo.>> za sebou bez mezery), pominulu-li std::bind.což je asi nejefektivnější datová struktura pro tento účelPokud na vstupu budou vždy pouze slova z předem dané množiny, pak ta slova nepotřebuji ani ukládat. Jednoduchý benchmark je v článku GPERF: A Perfect Hash Function Generator na straně 10.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.