#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);
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);
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);
}
};
#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玩的很好哦,我这边一个高手同事都说你的技巧很高:)
谢谢各位。
我的程序原来没有用typedef定义函数指针,所以总是有问题,改了就好了。
to xueweizhong,你的stl玩的很好哦,我这边一个高手同事都说你的技巧很高:)
谢谢各位。
#7
to xueweizhong,对于do_fptr函数参数要改一下,我把他改成
static void do_fptr( fptr p );程序就通过了。原来那样编译不过的。
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);
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);
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);
}
};
#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玩的很好哦,我这边一个高手同事都说你的技巧很高:)
谢谢各位。
我的程序原来没有用typedef定义函数指针,所以总是有问题,改了就好了。
to xueweizhong,你的stl玩的很好哦,我这边一个高手同事都说你的技巧很高:)
谢谢各位。
#7
to xueweizhong,对于do_fptr函数参数要改一下,我把他改成
static void do_fptr( fptr p );程序就通过了。原来那样编译不过的。
static void do_fptr( fptr p );程序就通过了。原来那样编译不过的。