在 C 17 中包含陣列的聚合型別如何獲取成員個數

時間 2021-05-31 01:47:30

1樓:

判斷struct unbinding,用這個方法本來就不行。

換gcc/clang的({})擴充套件,把unbinding的stmt轉為expr,在判斷expr合法性即可。

2樓:

不是很明白, 序列化和反序列化的意思, 如果你是要計算成員數量的話(包括陣列內)

#include

#include

#include

#include

struct

Any_type

;template

unsignedN=

1,bool

=std

::is_class

::

value

>class

MemberSizeT

;template

unsigned

N>class

MemberSizeT

>,std

::true_type

{}));

template

U>static

std::

false_type

match

(...);

public

:static

constexpr

unsigned

value

=std

::conditional_t

(match

(IndexListT

()))

::value

,std

::integral_constant

>,MemberSizeT

>::

value;};

template

T>class

MemberSizeT

>;template

T>static

constexpr

unsigned

MemberSize

=MemberSizeT

)>::

value

;// 測試

struct

test

;using

std::

cout

;using

std::

endl

;int

main

()效率可能不咋地

3樓:

template

class

...Args

>decltype

(void(T

...}),

std::

true_type

{})test_is_braces_constructible(int

);^^^^^^

如何評價 C 17 之後的 Value Categories 值類別 ?

黃亮anthony 也許不能覆蓋一些特殊的表示式,我一直保持乙個簡單純樸的理解。有名字的表示式是乙個左值 生命週期馬上結束的 臨時變數,函式返回值 左值是xvalue,它也是乙個右值。其它是右值 如果追求準確性,建議背這個張表 https en.cppreference.com w cpp lang...

C 17 的指標型別的強制轉換何解?

躺平之王 reinterpret 是對記憶體資料的型別重新解釋,主要用來無關型別轉換,比如指標型別轉成整數,原來4B解釋成位址的現在解釋成整型 static 最常用,進行相關型別的轉換,比如基本型別之間,父類子類之間,void 與其他指標型別。dynamic 與static對應的,是執行態的轉換,在...

這個C 寫法是想實現什麼功能,貌似是C 17的語法,能不能為了編譯器相容改成C 11的寫法?

老鹹魚表示。C 11的新內容還是很modern的。右值引用單獨用std move也就硬背了。但是C 17的這些。哎。看得有一種 老語法是屎山,我們新來一套,新舊標準都可,任君選用 的蛋疼感。什麼時候出乙個拋棄C時代語法的C 語言呀。 想實現什麼功能,已經有其他答主回答了,那我就來回答下怎麼改成 C ...