C++ class 变量 std::function 具有默认功能并且可以更改
C++ class variable std::function which has default functionality and can be changeable
需要在 class 中有一个函数变量,它具有默认功能并且它的功能可以被覆盖。例如我如何 liked/wanted 做(不幸的是不成功):
#include <iostream>
#include <functional>
using namespace std;
class Base
{
public:
std::function<bool(void)> myFunc(){
cout << "by default message this out and return true" << endl;
return true;}
};
bool myAnotherFunc()
{
cout << "Another functionality and returning false" << endl;
return false;
}
int main()
{
Base b1;
b1.myFunc(); // Calls myFunc() with default functionality
Base b2;
b2.myFunc = myAnotherFunc;
b2.myFunc(); // Calls myFunc() with myAnotherFunc functionality
return 0;
}
我知道,这段代码无法编译。
任何人都可以帮助解决这个问题,或者推荐一些东西。
不需要是std::function,如果有另一种方法可以实现这个逻辑。也许应该使用 lambda?!
更改为:
class Base {
public:
std::function<bool()> myFunc = [](){
cout << "by default message this out and return true" << endl;
return true;
};
};
修改最少的解决方案:
http://coliru.stacked-crooked.com/a/dbf33b4d7077e52b
class Base
{
public:
Base() : myFunc(std::bind(&Base::defAnotherFunc, this)){}
std::function<bool(void)> myFunc;
bool defAnotherFunc(){
cout << "by default message this out and return true" << endl;
return true;}
};
需要在 class 中有一个函数变量,它具有默认功能并且它的功能可以被覆盖。例如我如何 liked/wanted 做(不幸的是不成功):
#include <iostream>
#include <functional>
using namespace std;
class Base
{
public:
std::function<bool(void)> myFunc(){
cout << "by default message this out and return true" << endl;
return true;}
};
bool myAnotherFunc()
{
cout << "Another functionality and returning false" << endl;
return false;
}
int main()
{
Base b1;
b1.myFunc(); // Calls myFunc() with default functionality
Base b2;
b2.myFunc = myAnotherFunc;
b2.myFunc(); // Calls myFunc() with myAnotherFunc functionality
return 0;
}
我知道,这段代码无法编译。 任何人都可以帮助解决这个问题,或者推荐一些东西。 不需要是std::function,如果有另一种方法可以实现这个逻辑。也许应该使用 lambda?!
更改为:
class Base {
public:
std::function<bool()> myFunc = [](){
cout << "by default message this out and return true" << endl;
return true;
};
};
修改最少的解决方案:
http://coliru.stacked-crooked.com/a/dbf33b4d7077e52b
class Base
{
public:
Base() : myFunc(std::bind(&Base::defAnotherFunc, this)){}
std::function<bool(void)> myFunc;
bool defAnotherFunc(){
cout << "by default message this out and return true" << endl;
return true;}
};