相关疑难解决方法(0)

我应该在C++中使用std :: function还是函数指针?

在C++中实现回调函数时,我是否还应该使用C风格的函数指针:

void (*callbackFunc)(int);
Run Code Online (Sandbox Code Playgroud)

或者我应该使用std :: function:

std::function< void(int) > callbackFunc;
Run Code Online (Sandbox Code Playgroud)

c++ function std callback c++11

128
推荐指数
4
解决办法
5万
查看次数

std :: function和std :: bind:它们是什么时候应该使用它们?

我知道什么是仿函数以及何时将它们与stl algos一起使用.但不明白他在这个主题中的意思:

C++ 11FAQ

任何人都可以解释什么是什么std,什么std::bind时候应该使用,新手的一些例子?

c++ stdbind c++11 std-function

114
推荐指数
4
解决办法
7万
查看次数

是否存在函数指针未涵盖的std :: function的用例,还是仅仅是语法糖?

与函数指针相比​​,std :: function的表示法非常好.但是,除此之外,我找不到一个用指针无法替换的用例.那么它只是函数指针的语法糖吗?

c++ c++-standard-library c++11 std-function

12
推荐指数
2
解决办法
2098
查看次数

如何用std :: function在C++中实现策略模式

我正在讨论在C++中实现策略模式的最佳方法.到目前为止,我一直使用标准方式,其中上下文具有指向基本策略类的指针,如下所示:

 class AbstractStrategy{
 public:
     virtual void exec() = 0;
 }
 class ConcreteStrategyA{
 public:
     void exec();
 }
 class ConcreteStrategyB{
 public:
     void exec();
 }

 class Context{
 public:
     Context(AbstractStrategy* strategy):strategy_(strategy){}
     ~Context(){
          delete strategy;
       }
      void run(){
           strategy->exec();
      }
 private:
     AbstractStrategy* strategy_;
Run Code Online (Sandbox Code Playgroud)

由于有指向对象的指针可能会导致不良行为,我一直在寻找一种更安全的方式来实现这种模式,我发现这个问题在哪里std::function被提议作为处理这种模式的更好方法.

有人可以更好地解释一下如何std::function运作,也许有一个战略模式的例子?

c++ pointers strategy-pattern c++11 std-function

8
推荐指数
2
解决办法
1942
查看次数

std :: function vs Lambda用于传递成员函数

我正在为游戏引擎创建消息传递系统,其中引擎的最终用户可以创建消息对象并将其传递给游戏对象,以由包含附加到游戏对象的组件的侦听器对象进行解释.如果消息与侦听器正在侦听的消息匹配,则侦听器应调用函数指针并将其传递给已接收的消息.基本结构看起来像这样:

class Message
{
    std::string message;
};

class Listener
{
    std::string target;
    void (*fn)(Message*);
};
Run Code Online (Sandbox Code Playgroud)

使用游戏对象的代码来接收如下所示的消息:

//if the queue is empty then dont do anything
if (messageQueue.empty())
{
    return;
}

//else grab the front of the queue
Message* newMessage = messageQueue.front();

//pop our message from the queue
messageQueue.pop();

//for each component in our list
for (std::vector<Component*>::iterator i = ComponentList.begin(); i < ComponentList.end(); i++)
{
    Component* itemp = *i;
    //for each message in its listener list
    for (std::vector<Listener*>::iterator j = itemp->Listeners.begin(); …
Run Code Online (Sandbox Code Playgroud)

c++ lambda pointers c++11

4
推荐指数
1
解决办法
2904
查看次数

使用std :: function的优点

亲爱的stackoverflow用户.

我试图找到优点std::function,为什么我应该使用它而不是函子或指针来运行.可悲的是,我找不到令人满意的答案.

这就是为什么我会非常感激,如果你能告诉我什么是优点,什么std::function时候我应该使用它.希望我的问题能够帮助其他人.

c++ c++11 c++14

0
推荐指数
1
解决办法
1113
查看次数