c++ 防止类共享静态对象

c++ Prevent class from sharing static object

本文关键字:静态 对象 共享 c++      更新时间:2023-10-16

我有一些代码(来自如何制作静态回调 c++(,我用它来从这样的类访问 main 中的函数:

#include <functional>
#include <iostream>
class Foo 
{
public:
    static std::function<void()> onCallBackResult;
    void start(std::function<void()> callback)
    {
        onCallBackResult = callback;
        second();
    }
    static void second() { //Needs to be static here
        onCallBackResult();
    }
};
std::function<void()> Foo::onCallBackResult;
void onCallBackResult() 
{
    std::cout << "Resultn";
}
int main() {
    Foo foo;
    foo.start(std::bind(onCallBackResult));
}

但是我想使用不同的函数创建同一类的多个实例,但由于它在这里声明为"std::function Foo::onCallBackResult;",它总是共享相同的函数,无论我在哪里或如何更改它在一个类的实例中。我在这里的疑问是如何更改它以允许我不共享相同的功能。谢谢!

我认为您使用了错误的方法调用onCallBackResult函数。你能试试这段代码吗:

    #pragma once #include <functional> 
#include <iostream> class Foo { 
public: std::function<void()> onCallBackResult; 
void start(std::function<void()> callback) { 
onCallBackResult = callback; 
second(); 
} 
void second() { 
//Needs to be static here 
onCallBackResult();
} 
}; 
//std::function<void()> Foo::onCallBackResult; 
void onCallBackResult() { 
std::cout << "Resultn"; 
} 
int main() { 
Foo foo; 
foo.start(std::bind(foo.onCallBackResult)); 
}