水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:今天看见一个完全看不懂的写法
15楼
|
ble
|
2023-02-22 15:14:35
|
展开
模板再怎么用也只是替换,这个地方Overloader没有变参数的构造函数,也没有对应的结构体成员,顶楼代码是不是少写了什么?
【 在 ziqin 的大作中提到: 】
: 你把初始化{}当作一个builder函数就很好理解了
: --
发自「今日水木 on 钛星」
--
FROM 223.104.40.*
18楼
|
ble
|
2023-02-22 15:47:24
|
展开
进链接看了,楼主少写了模板推导指引
template<typename... T>
Overloader(T...) -> Overloader<T...>;
【 在 haha103 的大作中提到: 】
: 那两个lambda被编译成了(没有inline的话)两个普通函数(跟这个Overloader类没有关系的函数)。
:
: 调用的时候:
:
: o("1.23");
: o(2.34f);
:
: 会去调用这两个函数。(当然如果开了优化,这个函数调用肯定就inline了)
: ..................
发自「今日水木 on 钛星」
--
FROM 223.104.40.*
20楼
|
ble
|
2023-02-22 15:51:50
|
展开
是用的20标准,但是xcode14.2(Apple clang 14.0.0)不认
这里应该是利用了struct的默认参数为
std::initializer_list的构造函数,这个list只用来推导模板类,list对象本身直接抛弃了。
【 在 haha103 的大作中提到: 】
: c++20不用。。。。
: --
发自「今日水木 on 钛星」
--
修改:ble FROM 223.104.40.*
FROM 223.104.40.*
23楼
|
ble
|
2023-02-22 16:19:52
|
展开
基尔加丹,P2082R1果然到现在都没被Clang支持。
【 在 ziqin 的大作中提到: 】
: 不要迷信clang,现在对c++20支持最全的是msvc
:
:
https://en.cppreference.com/w/cpp/compiler_support/20
:
: --
发自「今日水木 on 钛星」
--
FROM 223.104.40.*
26楼
|
ble
|
2023-02-22 18:18:25
|
展开
个人觉得,这种推导还是反直观的,list initilization初始化结构体,第一个元素初始化第一个成员,这种是直观的而且延用已久。但是第一个成员的类型推到模板的第一个参数,有点反直观了。
【 在 ziqin 的大作中提到: 】
: 这个其实就是定义了一个函数
: 但是事实上,list initilization和ctor函数或者builder函数还是不一样
: list initialization是直接把参数在内存上初始化了,而ctor或者builder,或者任何通过函数来构建object的操作,都会多一次函数指针和参数复制的操作
: ...................
--
修改:ble FROM 222.129.50.*
FROM 222.129.50.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版