gpt4 book ai didi

c++ - 成员指针和成员函数的最佳用途是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:31:55 25 4
gpt4 key购买 nike

指向成员的指针用得不多,但它们真的很强大,你是如何使用它们的?你做过的最酷的事情是什么?

编辑:这并不是要列出可能的事情,例如列出 boost::bindboost::function 是不好的。相反,也许与他们一起使用很酷?我知道它们本身很酷,但这不是本文的主题。

最佳答案

我曾经需要将条件数据作为纯结构进行操作,以便能够将所有条件的列表存储在队列中。而且我必须将结构与 GUI 和其他过滤器元素等绑定(bind)在一起。所以我提出了使用指向成员的指针以及指向成员函数的指针的解决方案。

假设你有一个

struct Criteria
{
typedef std::string Criteria::* DataRefType;
std::string firstname;
std::string lastname;
std::string website;
};

比你可以包装标准字段并与字段的字符串表示绑定(bind)

class Field
{
public:
Field( const std::string& name,
Criteria::DataRefType ref ):
name_( name ),
ref_( ref )
{}
std::string getData( const Criteria& criteria )
{
return criteria.*ref_;
}
std::string name_;
private:
Criteria::DataRefType ref_;
};

然后您可以随时注册要使用的所有字段:GUI、序列化、按字段名称进行比较等。

class Fields
{
public:
Fields()
{
fields_.push_back( Field( "First Name", &Criteria::firstname ) );
fields_.push_back( Field( "Last Name", &Criteria::lastname ) );
fields_.push_back( Field( "Website", &Criteria::website ) );
}
template < typename TFunction >
void forEach( TFunction function )
{
std::for_each( fields_.begin(), fields_.end(),
function );
}
private:
std::vector< Field > fields_;
};

通过调用例如 fields.forEach( serialization );

GuiWindow( Criteria& criteria ):
criteria_( criteria )
{
fields_.forEach( std::bind1st(
std::mem_fun( &GuiWindow::bindWithGui ),
this ) );
}
void bindWithGui( Field field )
{
std::cout << "name " << field.name_
<< " value " << field.getData( criteria_ ) << std::endl;
};

关于c++ - 成员指针和成员函数的最佳用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com