- 主题:今天看见一个完全看不懂的写法
是用的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.*
不要迷信clang,现在对c++20支持最全的是msvc
https://en.cppreference.com/w/cpp/compiler_support/20
【 在 ble 的大作中提到: 】
: 是用的20标准,但是xcode14.2(Apple clang 14.0.0)不认
: 发自「今日水木 on 钛星」
--
修改:ziqin FROM 122.224.174.*
FROM 122.224.174.*
GCC 11以上就支持了 :)
【 在 ble 的大作中提到: 】
: 是用的20标准,但是xcode14.2(Apple clang 14.0.0)不认
: 发自「今日水木 on 钛星」
--
FROM 182.150.115.*
奇怪,楼主为啥要少写这个deduction guide
我进这个网页复制了代码,没仔细看,直接-std=c++17编译过去了,还以为复制的和楼主的代码一样呢。
【 在 ble 的大作中提到: 】
: 进链接看了,楼主少写了模板推导指引
: template<typename... T>
: Overloader(T...) -> Overloader<T...>;
: ...................
--
FROM 222.131.205.*
这个其实就是定义了一个函数
但是事实上,list initilization和ctor函数或者builder函数还是不一样
list initialization是直接把参数在内存上初始化了,而ctor或者builder,或者任何通过函数来构建object的操作,都会多一次函数指针和参数复制的操作
c++20以前,这种需要通过参数来deduce template parameter,只能通过function template来做,c++20直接允许list initialization来deduce template parameter
【 在 ble 的大作中提到: 】
: 进链接看了,楼主少写了模板推导指引
: template<typename... T>
: Overloader(T...) -> Overloader<T...>;
: ...................
--
FROM 122.224.174.*
个人觉得,这种推导还是反直观的,list initilization初始化结构体,第一个元素初始化第一个成员,这种是直观的而且延用已久。但是第一个成员的类型推到模板的第一个参数,有点反直观了。
【 在 ziqin 的大作中提到: 】
: 这个其实就是定义了一个函数
: 但是事实上,list initilization和ctor函数或者builder函数还是不一样
: list initialization是直接把参数在内存上初始化了,而ctor或者builder,或者任何通过函数来构建object的操作,都会多一次函数指针和参数复制的操作
: ...................
--
修改:ble FROM 222.129.50.*
FROM 222.129.50.*
list initialization 和 std::initializer_list 有关吗?
【 在 ble 的大作中提到: 】
: 是用的20标准,但是xcode14.2(Apple clang 14.0.0)不认
: 这里应该是利用了struct的默认参数为
: std::initializer_list的构造函数,这个list只用来推导模板类,list对象本身直接抛弃了。
: ...................
--
FROM 64.207.220.*
还是那句话,你把list initialization当作广义的ctor就很好理解了
我觉得,当初提出list initialization,大概想法就是想给fill class elements这个动作做特殊的编译期优化,但是又需要统一到c++原来的ctor框架里。所以增加了{},然后又要各种完备,使得{}在使用的时候,形式上和ctor一样
【 在 ble 的大作中提到: 】
: 个人觉得,这种推导还是反直观的,list initilization初始化结构体,第一个元素初始化第一个成员,这种是直观的而且延用已久。但是第一个成员的类型推到模板的第一个参数,有点反直观了。
:
--
FROM 115.193.178.*
模板真的能玩出花
【 在 fanci 的大作中提到: 】
: template<typename... Ts>
: struct Overloader : Ts...
: {
: using Ts::operator()...; // exposes operator() from every base
: };
:
: int mai
: ..................
发自「今日水木 on M2007J17C」
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 115.171.61.*]
FROM 115.171.61.*