new とか new[] する必要がないなら、それだけ禁止さえしておけば
public継承で別に問題ないのでは?と俺は思うけれど。

>>767
初期化時以外は完全に std::map として扱いたいという要求なら、
この方がわかりやすい気がする。

map<string, FUNC>& funcMap()
{
 static struct initialize {
  initialize()
   {
    map_["hoge"] = &Hoge;
    map_["hage"] = &Hage;
   }
  map<string, FUNC> map_;
 } unique_instance;
 return unique_instance.map_;
}

そうでなくて、実行時用の操作メソッドをもった一個のクラスとしてCTableを
作りたいなら、当然実装詳細である map は private に隠すべきでしょう。