Tai*_*and 5 c++ function-pointers
精简版:
要点是实例的(复杂)状态可以被类定义之外的函数改变,因此类可以扩展为具有各种内部状态,而不会用许多状态污染类定义 -二传手。
假设以下代码:
class bar
{
virtual void ChangeState()=0;
}
class foo:bar
{
private:
int b;
public:
void ChangeState() {b=3;}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是创建不同的函数,然后在运行时将它们传递给函数,例如
foo.ChangeState(); //b is 3 now
void foo::(?)ChangeState2(){ b=2; };
foo.ChangeState=ChangeState2;
foo.ChangeState(); //b is 2 now
Run Code Online (Sandbox Code Playgroud)
可以在 C++ 中实现这样的构造,而不使用 hacks 吗?
也许,这会有所帮助:
#include <iostream>
namespace so
{
class B
{
friend void change_1( B * );
friend void change_2( B * );
friend void change_3( B * );
int i;
public:
B() : i{ 0 } {}
void change_state( void (*_function)( B * ) )
{
_function( this );
std::cout << i << std::endl;
}
};
void change_1( B * _object )
{
_object->i = -1;
}
void change_2( B * _object )
{
_object->i = -2;
}
void change_3( B * _object )
{
_object->i = -3;
}
} //namespace so
int main()
{
so::B b{ };
b.change_state( so::change_1 );
b.change_state( so::change_2 );
b.change_state( so::change_3 );
return( 0 );
}
Run Code Online (Sandbox Code Playgroud)