任意の関数型を保存するには?

解決


ポケホーク  2012-11-03 09:51:57  No: 73547  IP: [192.*.*.*]

引数をとらない関数オブジェクトをメンバ変数に複数保存しておきたいのですが...
例えば、
class hoge {
 private:
 /* 関数を保存しておく型 */ funcs;
 public:
 template<typename F>
 void SetFunc(int i, F func)
 {
  funcs[i] = func;
 }
 void CallFunc(int i)
 {
  funcs[i]();
 }
};
このようにしたいです。
方法は違ってもいいので教えていただければと思います。

編集 削除
επιστημη  URL  2012-11-03 13:05:38  No: 73548  IP: [192.*.*.*]

コレ↓でいいかしら。

#include <iostream>
#include <functional>

using namespace std;

class hoge {
private:
   function<void()> funcs[3];
public:
   void SetFunc(int i, function<void()> func) {
     funcs[i] = func;
   }
   void CallFunc(int i) {
     funcs[i]();
   }
};

void ff() { cout << "function f\n"; }
void gg() { cout << "function g\n"; }
void hh() { cout << "function h\n"; }

int main() {
  hoge h;
  h.SetFunc(0, ff);
  h.SetFunc(1, gg);
  h.SetFunc(2, hh);
  h.CallFunc(0);
  h.CallFunc(1);
  h.CallFunc(2);
}

編集 削除
ポケホーク  2012-11-04 19:32:30  No: 73549  IP: [192.*.*.*]

できました。
ありがとうございます。

編集 削除