- 主题:[求助] 请教这个语法是什么
你不觉得 c++ 的 cout << 1 << 2 << 3 << endl; 语法现象更神奇吗?我要告诉你它们是一样的。
【 在 pfan117 的大作中提到: 】
: 我是C程序员,生活所迫,正在读一个c++项目。不懂就问,请教一下各位,这段代码是什么语法现象?是模板吗?
:
: send<pp_foo>(BAR)
: ...................
--
FROM 114.249.195.*
看起来就是普通的建造者模式(builder pattern)写法。虽然涉及到一个模板参数,但你显然只是对 return *this 以支持链式调用这种用法不熟悉。
链式调用其实很常见,也不仅仅是 builder pattern 会用到。稍稍仔细看看标准库就能看到链式调用的例子,比如 std::bitset 类型的变量就可以 a.set(1).set(2).reset(3)。类成员函数返回 *this 的都是为了支持这种语法。更普遍的链式调用是通过运算符重载完成的,例如 std::complex 复数类型能支持 z1 + z2 + z3,其实是 operator+ 函数返回了相应类型,又比如更常见的 cout << 1 << 2 这样的链式调用。运算符重载让链式调用更隐蔽了,不过如果你自己涉及过这样的 c++ 类就会很熟悉了。
c 的语法限制比较难做到链式调用,类似的调用要写成函数嵌套的方式。
你可以考虑实现一个多精度大整数类型。
c 语言里,现实的实现比如 gmp/mpir 或者 openssl 库,几个数连加写起来是比较麻烦的。
可以再看看支持对象方法但不支持运算符重载的语言,比如 java 的 BigInteger 或者 go 的 big.Int 类型是怎么使用链式调用的。
最后看支持运算符重载的 C++ 库,比如 NTL 库,或者 Crypto++ 库的 Integer 类怎么写。
见多了就好了。
【 在 pfan117 的大作中提到: 】
: 我是C程序员,生活所迫,正在读一个c++项目。不懂就问,请教一下各位,这段代码是什么语法现象?是模板吗?
:
: send<pp_foo>(BAR)
: ...................
--
FROM 114.249.195.*
range 其实喜闻乐见吧,比迭代器直观多了
【 在 ble 的大作中提到: 】
: c++ 20 还要继续添加更奇怪的
: auto v = utf::istreambuf(in_file)
: | utf::view::consume_bom
: ...................
--
FROM 114.249.195.*