我为std :: function设置的目标丢失了,我不知道为什么我可能忽略了这个程序中的一些小错误.有人可以帮忙吗
class Test将lambda注册到单例类,但是当尝试调用回调时,std :: function中的目标集将丢失.
#include <iostream>
#include <functional>
using namespace std;
class callback_store final
{
using callback_func_type = std::function<void()>;
public:
static callback_store instance()
{
static callback_store instance;
return instance;
}
void register_callback(callback_func_type func)
{
std::cout << "register_callback() <<<" << std::endl;
m_func = func;
// I am able to call the targets from here.
std::cout << "register_callback() func() " << std::endl;
func();
std::cout << "register_callback() m_func() " << std::endl;
m_func();
// some stats
std::cout << "register_callback() :: " …Run Code Online (Sandbox Code Playgroud) 如何在g ++ - 6.2.1中克服/解决此错误
以下代码适用于g ++ - 7.3.0,但升级编译器对我来说不是一个选项.所以我正在寻找一些SFINAE魔法......尝试很少但到目前为止失败了......
class Base {
public:
Base(std::string str) : s(std::make_shared<std::string>(str)) {}
Base(Base &&base) noexcept { s = std::move(base.s); }
Base &operator=(Base &&i_base_actor) noexcept {
s = std::move(i_base_actor.s);
return *this;
}
virtual ~Base() = default;
private:
std::shared_ptr<std::string> s;
};
// Derived
class Derived : public Base {
public:
Derived() :Base("Derived") {}
~Derived() = default;
};
// Derived1
class Derived1 : public Base {
public:
Derived1(int a) :Base("Derived1") {}
~Derived1() = default;
};
Run Code Online (Sandbox Code Playgroud)
包装功能:
template<typename T, …Run Code Online (Sandbox Code Playgroud) c++ move-semantics variadic-templates perfect-forwarding c++17