[C++] The first commit for C++ version

16 tests out of 169 are passing.
diff --git a/func.cc b/func.cc
new file mode 100644
index 0000000..2910193
--- /dev/null
+++ b/func.cc
@@ -0,0 +1,44 @@
+#include "func.h"
+
+#include <stdio.h>
+
+#include <unordered_map>
+
+#include "log.h"
+#include "strutil.h"
+
+namespace {
+
+void BuiltinInfoFunc(const vector<Value*>& args, Evaluator* ev, string*) {
+  shared_ptr<string> a = args[0]->Eval(ev);
+  printf("%s\n", a->c_str());
+  fflush(stdout);
+}
+
+FuncInfo g_func_infos[] = {
+  { "info", &BuiltinInfoFunc, 1 },
+};
+
+unordered_map<StringPiece, FuncInfo*>* g_func_info_map;
+
+}  // namespace
+
+void InitFuncTable() {
+  g_func_info_map = new unordered_map<StringPiece, FuncInfo*>;
+  for (size_t i = 0; i < sizeof(g_func_infos) / sizeof(g_func_infos[0]); i++) {
+    FuncInfo* fi = &g_func_infos[i];
+    bool ok = g_func_info_map->insert(make_pair(Intern(fi->name), fi)).second;
+    CHECK(ok);
+  }
+}
+
+void QuitFuncTable() {
+  delete g_func_info_map;
+}
+
+FuncInfo* GetFuncInfo(StringPiece name) {
+  auto found = g_func_info_map->find(name);
+  if (found == g_func_info_map->end())
+    return NULL;
+  return found->second;
+}