C++20四大之三:concept特性详解 前言:C++模板的演进模板的演进是C++发展史中一条十分重要的线,个人觉得Concept是这条线中最大的一个特性了。在介绍Concept之前,我们先捋一捋模板这条线的发展。据Stroustrup先生回忆, 对模板的设想早在1982年便有了,正式提出是在1998年的 USENIX C++ conference会议上提出,设计模板的初衷是因为当时的C++缺少一个标准库,而当时没有模板的C++很难设计出“vector、list”这种适用于多种类型的容器。到1998年模板正式进入标准,在这之前C++模板已经
C++20四大之一:module特性详解 写在最开始:C++20最大的特性是什么?最大的特性是迄今为止没有哪一款编译器完全实现了所有特性1,module1,头文件的由来2,实现一个最简单的module3,接口与实现分离module接口文件(后缀名)、module实现文件4,可见性控制5,子模块(submodule)6,模块拆分(module partition)2,concept带约束的T函数模板缩写https://devblogs.microsoft.com/cppblog/abbreviated-function-t
将成员函数转成全局函数 我们在开发中肯定遇到过将一个成员函数经过bind,变成一个std::function,可以用来做回调等等,std::function只能在C++中使用,假如我们想将成员函数绑定到一个全局函数的,暴露其函数指针,则C以及其他好多语言,也可以受惠了。思路是使用模板,结合bind,为每一个绑定生成一个模板类,暴露类中的static函数。代码如下:template<uint64_t id, class R, class C, class... Params, class Ptr, class Args&g
C++模板的一些整理 C++的模板是个争议很大的特性,有些公司的编码规范明确禁止使用template(STL之类的不受限制),理由是C++模板的报错信息非常不友好,另外不能以二进制方式复用,模板代码一旦变化就会扩散至所有使用模板的代码中、维护成本高。template可以极大地方便SDK、公共库等岗位的开发人员,对侧重业务实现的开发人员来说可能没有那么有吸引力,日常使用中与模板有关的最多的可能就是STL了。vector<int> int_vec;vector<float> float_vec;...
zk-SNARKs 1,同态隐藏(Homomorphic Hidings)给定E(x),很难反推出x的值若x != y, 则E(x) != E(y)若已知 E(x) 与 E(y),则可计算出E(x+y)举例说明同态隐藏在零知识证明中的作用:假设Alice知道 x 和 y的值使得 x+y=7,利用同态隐藏,Alice可以在不泄露x和y具体值的情况下像Bob证明她的确知道x和y的值,过程如下:A...
Fabric中的“账户”体系 本文的联盟链是以Fabric为例。联盟链相对于公链,最大的不同在于:联盟链上的数据不是对所有人都公开的,只有联盟内的成员才可以访问、写入链上数据。第二个重要的区别:联盟链不发币,所以联盟链里的账户没有以太坊比特币那样的账户地址。Fabric的访问控制、权限控制等,是通过MSP(Membership Service Provider)提供。这套机制与公链常见的账户模型差别甚大。本文探讨下Fab...
C++14与C++17新特性,你想知道的都在这 这篇博文躺在草稿箱里好久了,今天有点时间,整理下发出来------------------------------------------C++14篇------------------------------------------相对于C++11,C++14的改动可谓非常mini了,主要的改动一句话便是:扩大自动类型推断的应用范围。剩下的都是边边角角的小改动这包括:函数返回值自动推...
C++11新特性集锦——新标准库 1,新增的关键字autodecltypeconstexp=defaultoverridenoexceptfinal2,新增的标准库moveforwardbindtuppleshared_prtunique_ptrweak_ptrinitializer_list3,新的语义统一的初始化列表初始化返回值lambda表达式sizeof…委托构造函数范围for...
Eth2.0 前景堪忧 以太坊在1.0时代扛起了"区块链2.0"的大旗,它支持智能合约,使各种ICO层出不穷,各种Dapps如雨后春笋般冒出,DAO、Bancor、CryptoKitty 等著名dapps赚足了圈内的流量与关注,FairWin等合约游戏也赚得盆满钵满。那么即将到来的Eth2.0能带来哪些改变,这些改变能否像Eth1.0那样引起巨变呢?先抛一个个人观点:Eth2.0的影响不会再像Eth1.0那样显著。我...
solidity快速入门(扩展篇) 扩展篇1.继承、多态、super 与 C3 线性化solidity支持继承,并且支持多重继承。下面的代码展示了基本的继承的作用:代码重用。contract ERC20Token{ string public name; string public symbol; uint256 public decimals; uint256 public totalSupply...
大型合约系统的一个构建思路与实践——升级版 固定的入口合约(不可升级)固定的事件合约(不可升级)固定的Data合约(不可升级)通过Owner关系、白名单等机制控制业务逻辑合约对以上三个合约的读写权限业务逻辑合约地址注册到Data,业务逻辑合约地址之间的依赖通过Data中转、解耦专用的GenInfo合约,通过数组一次返回多个前端需要的数据,减少请求次数、加快页面响应全局的暂停/重启开关,升级时使用升级后旧合约应该disable...
C++11新特性集锦——新语意 本文是C++11新特性系列的第二篇们主要记录C++11的新语意。2,新的语义2.1 大括号{}与初始化C++11之前,有这么几种初始化的方式默认初始化: A a; //调用默认构造函数值初始化:A a=1; //调用单参构造函数直接初始化: A a(1);//调用单参构造函数拷贝初始化: A a2(a1); A a2 = a1;//调用拷贝构造函数C++11之后,增加列表...
C++11新特性集锦——新关键字 C++11新引入的特性比较多,这里简单记录下每个特性的大致情况,无法将细节一一描述清楚——那样每个特性几乎都要花费一篇博客的篇幅来记录。本文从新增的关键字 、 新增的语义 、新增的标准库三个方面来记录这些新特性。原本打算将这三部分放到一篇博客中,后来发现太长了,还是分开吧。0,重点特性概览个人觉得,auto、统一的初始化(使用“{}”)、右值引用、lambda是C++11里面重量级的四个特性了...
使用truffle测试solidity中的重载函数 ERC223标准定义了三个重载的transfer函数。这给truffle测试带来了不少麻烦——直接在测试框架中调用transfer函数会报错:参数错误之类的信息。本文使用web3的sendTransaction方法实现重载函数的调用。安装web3-eth-abi这个包。引用这个包 const Web3Abi = require(‘web3-eth-abi’);准备好要调用的方法的ab...
std::move与std::forward代码分析 我们看下C++模板的类型推导(Type Decuction)过程中的部分规则:T&amp; &amp; =&gt; T&amp;T&amp;&amp; &amp; =&gt; T&amp;T&amp; &amp;&amp; =&gt; T&amp;T