C++ c++;将函子和参数传递给一个方法
我要完成这个任务 函数C++ c++;将函子和参数传递给一个方法,c++,oop,interface,functor,C++,Oop,Interface,Functor,我要完成这个任务 函数DoJob()。 可以传递一些变量,如“message”来验证功能。 或者,可以不传递任何参数来验证函数 MySingleton::getInstance()->DoJob(verify1, "A message"); 现在,DoJob是单例类的函数。我可以在任何地方使用getInstance()来获取这个类。 基于此,如何定义DoJob和verify接口 谢谢,单身人士课程: struct MySingleton { static MySingleton*
DoJob()。
可以传递一些变量,如“message
”来验证功能。
或者,可以不传递任何参数来验证函数
MySingleton::getInstance()->DoJob(verify1, "A message");
现在,DoJob
是单例类的函数。我可以在任何地方使用getInstance()
来获取这个类。
基于此,如何定义DoJob
和verify
接口
谢谢,单身人士课程:
struct MySingleton
{
static MySingleton* getInstance();
// DoJob for verify functions that need a message.
void DoJob(void (*verify)(std::string const&), std::string const& message)
{
verify(message);
}
// DoJob for verify functions that don't need a message.
void DoJob(void (*verify)())
{
verify();
}
};
用于验证的函数
void verify1(std::string const& message)
{
// Do something with message
}
使用singleton和verify函数
MySingleton::getInstance()->DoJob(verify1, "A message");
您可以使用C++11可变模板来实现这一点
class Foo {
//...
public:
static Foo & getInstance() {
static Foo instance;
return instance;
}
template <typename V, typename ...X>
void DoJob (V verify, X... x) {
verify(x...);
}
};
struct Vvoid {
void operator () (void) {}
};
struct Vstring {
void operator () (std::string) {}
};
void Vfunction (void) {}
//...
Foo &f = Foo::getInstance();
f.DoJob(Vvoid());
f.DoJob(Vstring(), "msg");
f.DoJob(Vfunction);
class-Foo{
//...
公众:
静态Foo&getInstance(){
静态Foo实例;
返回实例;
}
模板
无效DoJob(V验证,X…X){
验证(x…);
}
};
结构Vvoid{
void运算符()(void){}
};
结构Vstring{
void运算符()(std::string){}
};
void Vfunction(void){}
//...
Foo&f=Foo::getInstance();
f、 DoJob(Vvoid());
f、 DoJob(Vstring(),“msg”);
f、 DoJob(Vfunction);
请注意,Vvoid
和Vstring
是真正的functor(对象实例可以像使用()
操作符的函数一样调用)。但是,模板语法允许传入任何可调用实例,包括常规函数指针(例如,Vfunction
)
按照链接查看我们能看到一些代码吗?如果我们看不到你在做什么,就很难提供建议。添加一个超载的DoJob
@R Sahu我遇到了麻烦。当我使用getInstance()->DoJob(verify1,“xx”)时,我得到的“verify1”没有定义。我应该使用MySingleton::verify1而不是verify1吗?但上面说verify1的非静态memeber函数无效,但我不想让它成为静态的。我该怎么办?