64,687
社区成员
发帖
与我相关
我的任务
分享
struct AllFuncs
{
void *(*function1)(void *Objects, int buflen);
void (*function2)(void *Objects, void *buf);
}
static void* function1(void *Objects, int buflen);
static void function2(void *Objects, void *buf);
/* ----------------------------------------------------------------------------
* Local variables
* --------------------------------------------------------------------------*/
static const struct AllFuncS allFuncs =
{
function1,
function2,
};
static struct SecondFuncs sfs;
static int intBuf[] = {0, 0, 0};
/* ----------------------------------------------------------------------------
* 回调函数
* --------------------------------------------------------------------------*/
static void*
function1(void *Objects, int buflen)
{
// do something
// 会使用变量sfs
}
static void
function2(void *Objects, void *buf)
{
// do something
// 会使用变量allFuncs和intBuf
}
//method 1
class AllFuncsBase
{
public:
virtual void* function1(void *Objects, int buflen) = 0;
virtual void function2(void *Objects, void *buf) = 0;
~virtual AllFuncsBase(){}
};
class AllFuncs : public AllFuncsBase
{
public:
virtual void* function1(void *Objects, int buflen);
virtual void function2(void *Objects, void *buf);
private:
int buf_;
struct SecondFuncs sfs_;
};
//method 2
class Strategy_1
{
public:
virtual void* function1(void *Objects, int buflen) = 0;
virtual void function2(void *Objects, void *buf) = 0;
~virtual Strategy_1() {}
};
class Whatever
{
public:
virtual void* function1(void *Objects, int buflen) {...};
virtual void function2(void *Objects, void *buf) {...};
private:
int buf_;
struct SecondFuncs sfs_;
};
class AllFuncs
{
public:
void* function1(void *Objects, int buflen, Strategy_1 *strategy);
//function2依此类推
};
//method 3
class Strategy_1
{
public:
virtual void* function1(void *Objects, int buflen) = 0;
virtual void function2(void *Objects, void *buf) = 0;
~virtual Strategy_1() {}
};
class Whatever
{
public:
virtual void* function1(void *Objects, int buflen) {...};
virtual void function2(void *Objects, void *buf) {...};
private:
int buf_;
struct SecondFuncs sfs_;
};
void* function1(void *Objects, int buflen, Strategy_1 *strategy);
//method 4
class Whatever
{
public:
void* function1(void *Objects, int buflen) {...};
void function2(void *Objects, void *buf) {...};
private:
int buf_;
struct SecondFuncs sfs_;
};
template<typename Functor>
void* function1(void *Objects, int buflen, Functor strategy); //#1,function2依此类推
//#1的变种
void* function1(void *Objects, int buflen, std::function<void(void *Objects, int buflen)> strategy);
参考用,希望可以抛砖引玉