有些时候设计类时,其父类的初始化需要使用当前类的数据成员,先看下面的场景:
#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
分享到:
相关推荐
boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...
Boost库是C++的一个强大工具集,它提供了`boost::asio`模块,用于处理网络和底层I/O操作,包括串口通信。本篇文章将详细介绍如何使用`boost::asio::serialport`来实现串口通信。 首先,我们需要理解`boost::asio`的...
"boost-asio-cpp-network-programming-chinese.pdf"这个PDF文件很可能是Boost.Asio的中文教程,涵盖了从基础到高级的各种主题,对于初学者和有经验的开发者都是很好的参考资料。它可能会讲解如何设置服务器和客户端...
标题中的"boost_date_time-vc100-mt-1_49.dll"是一个动态链接库(DLL)文件,属于Boost库的一部分,专门用于日期和时间处理。Boost库是一个广泛使用的C++库集合,旨在提升C++的标准库功能,提供跨平台的、高质量的、...
离线安装包,亲测可用
离线安装包,测试可用
作为C++的准标准库,在C++的开发中的地位已经变得很重要了,自从发现了这本书后,我就开始迫不及待看起来。但是,从网上下载的许多pdf都是没有目录的,要么就是加密了的,所以我下载下来经过几天的编辑,终于做好了...
Boost库是C++编程语言的一个开源库集合,包含了大量的实用工具和库,旨在提升C++的标准库功能。在本案例中,我们关注的是Boost库的1.68版本,该版本已在Windows环境下使用Visual Studio 2017进行编译,并生成了用于...
离线安装包,亲测可用
matlab 2014b 破解缺少dll,boost_date_time-vc100-mt-1_49.dll,以及boost_filesystem-vc100-mt-1_49.dll
两相交错并联同步整流双向Buck Boost变器仿真 所有开关管均可实现ZVs软开关 Buck模式 输入:200-360VDC 额定280VDC 输出:140VDC 10A 开关频率:10kHz Boost模式: 输入:120-160VDC 额定140VDC 输出:280VDC 10A ...
Boost库强调泛型编程,如`Boost.Lambda`库允许在运行时构造函数体,`Boost.Bind`提供绑定函数和成员函数的能力,而`Boost.MPL`(Metaprogramming Library)则允许在编译时进行计算,极大地扩展了C++的编程范式。...
而4开关Buck-Boost双向DC-DC转换器作为一个能够实现电能双向流动并且能够在输出电压高于、低于或等于输入电压时工作的转换器,近年来备受关注。本文将详细解析这种转换器的特点、工作原理以及其在电力电子系统中的...
《基于Buck-Boost闭环控制的PCS双向储能变流器仿真研究及复现》,PCS系统中的双向储能变流器:Buck-Boost闭环控制仿真复现与性能分析,PCS双向储能变流器Buck-Boost闭环控制仿真【复现】 复现参考文献:《储能电站变流...
boost159-locale-1.59.0-2.el7.x86_64.rpm
mysq5.7源码安装的依赖库:boost-1-59-0.tar.gz Boost提供了一组免费的经过同行评审的可移植C ++源库。它包括用于线性代数,伪随机数生成,多线程,图像处理,正则表达式和单元测试的库
基于非隔离双向DC-DC变换器的Buck-Boost变换器仿真研究:电压外环电流内环控制下的蓄电池充放电模式切换与保护策略实现,"非隔离双向DC-DC变换器:Buck-Boost仿真模型研究——基于电压外环电流内环双闭环控制,实现...
boost-thread-1.41.0-11.el6_1.2.i686.rpm是centos工具包。
《基于Buck-Boost闭环控制的PCS双向储能变流器仿真复现研究》,基于PCS双向储能变流器技术的研究:Buck-Boost闭环控制仿真与复现分析,PCS双向储能变流器Buck-Boost闭环控制仿真【复现】 [1]复现参考文献:《储能电站...
《Boost C++应用开发实战指南》第二版是一本专注于利用Boost库进行C++应用程序开发的专业书籍。Boost库是C++编程领域的一个重要资源,它提供了一系列高质量、经过充分测试的库,可以极大地增强C++的功能性和效率。这...