请教高手这个问题:

时间:2021-03-06 09:19:08
//FunctionTable.cpp_______________________________
#define DF(N) void N(){\
         cout<<"function " #N  "called..."<<endl; \
}
DF(a); DF(b);DF(c);DF(d);DF(e);

void (*func_table[])() = {a,b,c,d,e};
int main()
{
    while(1)
{
cout<<"press a key from 'a' to 'e'" "or q to quit"<<endl;
char c,cr;
cin.get(c);cin.get(cr);
if(c == 'q')
break;
if(c < 'a' || c > 'e')
continue;
(*func_table[c - 'a'])();
}


//FunctionTable.cpp____________________________________________

根据上面的cpp文件,创建包含了一组函数指针的vector向量的类,用add()和remove()成员函数来增加和减少函数指针。在增加一个run()函数,该函数可在vector中移动,并可调用所有的函数。
/////请问大侠这个vector要怎么定义啊,这题要怎么做啊????等待ing!!!

7 个解决方案

#1


typedef void (*fnCallBack)();
vector<fnCallBack> vecFunc;
vecFunc.push_back*(a);
vecFunc.push_back*(b);
vecFunc.push_back*(c);

#2


typedef void (*fnCallBack)();
vector<fnCallBack> vecFunc;
vecFunc.push_back*(a);
vecFunc.push_back*(b);
vecFunc.push_back*(c);

#3


up

#4


#include <vector>
#include <algorithm>
#pragma hdrstop // Borland precompile

typedef void (*fptr)();

struct fptr_vector : private std::vector<fptr>
{
  void add(fptr p)
  {
    push_back(p);
  }
  void remove(fptr p)
  {
    erase(
      std::remove(begin(), end(), p),
      end()
         );
  }

private:
  static void do_fptr(const_iterator i)
  {
    (* (*i) )();
  }

public:
  void run() const
  {
    std::for_each(begin(), end(), &fptr_vector::do_fptr);
  }

};

#5


up

#6


to oopig, vecFunc.push_back*(a);那个星号表示什么意思啊??
我的程序原来没有用typedef定义函数指针,所以总是有问题,改了就好了。
to xueweizhong,你的stl玩的很好哦,我这边一个高手同事都说你的技巧很高:)
谢谢各位。

#7


to xueweizhong,对于do_fptr函数参数要改一下,我把他改成
static void do_fptr( fptr  p );程序就通过了。原来那样编译不过的。

#1


typedef void (*fnCallBack)();
vector<fnCallBack> vecFunc;
vecFunc.push_back*(a);
vecFunc.push_back*(b);
vecFunc.push_back*(c);

#2


typedef void (*fnCallBack)();
vector<fnCallBack> vecFunc;
vecFunc.push_back*(a);
vecFunc.push_back*(b);
vecFunc.push_back*(c);

#3


up

#4


#include <vector>
#include <algorithm>
#pragma hdrstop // Borland precompile

typedef void (*fptr)();

struct fptr_vector : private std::vector<fptr>
{
  void add(fptr p)
  {
    push_back(p);
  }
  void remove(fptr p)
  {
    erase(
      std::remove(begin(), end(), p),
      end()
         );
  }

private:
  static void do_fptr(const_iterator i)
  {
    (* (*i) )();
  }

public:
  void run() const
  {
    std::for_each(begin(), end(), &fptr_vector::do_fptr);
  }

};

#5


up

#6


to oopig, vecFunc.push_back*(a);那个星号表示什么意思啊??
我的程序原来没有用typedef定义函数指针,所以总是有问题,改了就好了。
to xueweizhong,你的stl玩的很好哦,我这边一个高手同事都说你的技巧很高:)
谢谢各位。

#7


to xueweizhong,对于do_fptr函数参数要改一下,我把他改成
static void do_fptr( fptr  p );程序就通过了。原来那样编译不过的。