有些时候设计类时,其父类的初始化需要使用当前类的数据成员,先看下面的场景:
#include <streambuf> // for std::streambuf
#include <ostream> // for std::ostream
class fdoutbuf
: public std::streambuf
{
public:
explicit fdoutbuf( int fd );
//...
};
class fdostream
: public std::ostream
{
protected:
fdoutbuf buf;
public:
explicit fdostream( int fd )
: buf( fd ), std::ostream( &buf )
{}
//...
};
C++的初始化顺序要求先初始化父类,先调用父类的构造函数,而调用父类构造函数时,buf当时并没有构造。因此类的行为就很难确定。
R. Samuel Klatchko提出了一个方式来解决初始化顺序的问题。基类构造函数的调用依赖基类的继承顺序,将成员移动到基类,然后设置好继承顺序。
#include <streambuf> // for std::streambuf
#include <ostream> // for std::ostream
class fdoutbuf
: public std::streambuf
{
public:
explicit fdoutbuf( int fd );
//...
};
struct fdostream_pbase
{
fdoutbuf sbuffer;
explicit fdostream_pbase( int fd )
: sbuffer( fd )
{}
};
class fdostream
: private fdostream_pbase
, public std::ostream
{
typedef fdostream_pbase pbase_type;
typedef std::ostream base_type;
public:
explicit fdostream( int fd )
: pbase_type( fd ), base_type( &sbuffer )
{}
//...
};
上述方式可以使用模板的方式来实现,因此就出现了boost中的base_from_member方式。
参考:
http://www.boost.org/doc/libs/1_46_1/libs/utility/base_from_member.html
分享到:
相关推荐
buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boost buck-boostDC-DC buck-boostDC-DC buck-boost buck-boost ...
boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...
Boost库是C++的一个强大工具集,它提供了`boost::asio`模块,用于处理网络和底层I/O操作,包括串口通信。本篇文章将详细介绍如何使用`boost::asio::serialport`来实现串口通信。 首先,我们需要理解`boost::asio`的...
标题中的"boost_date_time-vc100-mt-1_49.dll"是一个动态链接库(DLL)文件,属于Boost库的一部分,专门用于日期和时间处理。Boost库是一个广泛使用的C++库集合,旨在提升C++的标准库功能,提供跨平台的、高质量的、...
离线安装包,亲测可用
离线安装包,测试可用
作为C++的准标准库,在C++的开发中的地位已经变得很重要了,自从发现了这本书后,我就开始迫不及待看起来。但是,从网上下载的许多pdf都是没有目录的,要么就是加密了的,所以我下载下来经过几天的编辑,终于做好了...
matlab 2014b 破解缺少dll,boost_date_time-vc100-mt-1_49.dll,以及boost_filesystem-vc100-mt-1_49.dll
Boost库强调泛型编程,如`Boost.Lambda`库允许在运行时构造函数体,`Boost.Bind`提供绑定函数和成员函数的能力,而`Boost.MPL`(Metaprogramming Library)则允许在编译时进行计算,极大地扩展了C++的编程范式。...
boost159-locale-1.59.0-2.el7.x86_64.rpm
mysq5.7源码安装的依赖库:boost-1-59-0.tar.gz Boost提供了一组免费的经过同行评审的可移植C ++源库。它包括用于线性代数,伪随机数生成,多线程,图像处理,正则表达式和单元测试的库
boost-thread-1.41.0-11.el6_1.2.i686.rpm是centos工具包。
Boost库是C++编程语言的一个开源库集合,包含了大量的实用工具和库,旨在提升C++的标准库功能。在本案例中,我们关注的是Boost库的1.68版本,该版本已在Windows环境下使用Visual Studio 2017进行编译,并生成了用于...
《Boost C++应用开发实战指南》第二版是一本专注于利用Boost库进行C++应用程序开发的专业书籍。Boost库是C++编程领域的一个重要资源,它提供了一系列高质量、经过充分测试的库,可以极大地增强C++的功能性和效率。这...
boost_histogram-1.1.0-cp37-cp37m-win_amd64
《Boost图形库:用户指南和参考手册》是一本专为C++图形编程设计的权威指南,该书属于“C++ In-Depth”系列丛书,由Jeremy Siek、Lie-Quan Lee以及Andrew Lumsdaine共同编著。Boost图形库是Boost库的一部分,它是一...
MSVC142/143编译的boost库,版本1_83_0。 包含编译后的静态库和头文件。
离线安装包,亲测可用
该文件为boost库chm版中文帮助文档,版本为boost1.41,其目录结构明确,内容详尽,可谓boost库开发必备电子书籍,希望对使用boost库开发的人员有所帮助。