คำถามติดแท็ก constructor

5
Scala ประเภทที่สูงกว่าคืออะไร
คุณสามารถค้นหาสิ่งต่อไปนี้บนเว็บ: ประเภทที่สูงขึ้นชนิด == ตัวสร้างประเภท? class AClass[T]{...} // For example, class List[T] บางคนบอกว่านี่เป็นประเภทที่สูงกว่าเพราะมันเป็นนามธรรมมากกว่าประเภทซึ่งจะสอดคล้องกับคำนิยาม ประเภทที่สูงขึ้นเป็นประเภทที่ใช้ประเภทอื่น ๆ และสร้างประเภทใหม่ แม้ว่าเหล่านี้เป็นที่รู้จักกันเป็นประเภทคอนสตรัค (ตัวอย่างเช่นในการเขียนโปรแกรมใน Scala ) typeed type ที่สูงขึ้น == type constructor ซึ่งใช้ตัวสร้าง type เป็นพารามิเตอร์ type? ในGenericsกระดาษชนิดที่สูงขึ้นคุณสามารถอ่าน ... ประเภทที่เป็นนามธรรมมากกว่าประเภทที่เป็นนามธรรมมากกว่าประเภท ('ประเภทที่สูงกว่าประเภท') ... " ซึ่งแสดงให้เห็นว่า class XClass[M[T]]{...} // or trait YTrait[N[_]]{...} // e.g. trait Functor[F[_]] เป็นประเภทที่สูงขึ้น ดังนั้นด้วยนี้ในใจมันเป็นเรื่องยากที่จะแยกแยะระหว่างประเภทคอนสตรัค , ประเภท …

7
วิธีที่เป็นนามธรรมเพื่อแยกแยะคอนสตรัคเตอร์ zero-arg สองตัว
ฉันมีชั้นเรียนเช่นนี้: struct event_counts { uint64_t counts[MAX_COUNTERS]; event_counts() : counts{} {} // more stuff }; โดยปกติฉันต้องการเริ่มต้น (ศูนย์) เริ่มต้นcountsอาร์เรย์ตามที่แสดง ที่ตำแหน่งที่เลือกที่ระบุโดยการทำโปรไฟล์อย่างไรก็ตามฉันต้องการระงับการกำหนดค่าเริ่มต้นของอาร์เรย์เนื่องจากฉันรู้ว่าอาร์เรย์กำลังจะถูกเขียนทับ แต่คอมไพเลอร์ไม่ฉลาดพอที่จะเข้าใจได้ อะไรคือวิธีที่ใช้สำนวนและมีประสิทธิภาพในการสร้างตัวสร้าง zero-arg แบบ "รอง" ดังกล่าว ขณะนี้ฉันใช้คลาสแท็กuninit_tagที่ส่งผ่านเป็นอาร์กิวเมนต์ดัมมี่เช่น: struct uninit_tag{}; struct event_counts { uint64_t counts[MAX_COUNTERS]; event_counts() : counts{} {} event_counts(uninit_tag) {} // more stuff }; จากนั้นฉันเรียกผู้สร้างที่ไม่เริ่มต้นเช่นevent_counts c(uninit_tag{});เมื่อฉันต้องการที่จะปราบปรามการก่อสร้าง ฉันเปิดกว้างสำหรับการแก้ปัญหาที่ไม่เกี่ยวข้องกับการสร้างชั้นเรียนจำลองหรือมีประสิทธิภาพมากกว่าในบางด้านเป็นต้น

6
การเริ่มต้นตัวแปรชนิดที่ไม่รู้จักผ่านตัวสร้างที่โอเวอร์โหลดใน C ++
มาจากพื้นหลังหลามส่วนใหญ่ฉันค่อนข้างลำบากกับการทำงานกับประเภทใน C ++ ฉันพยายามที่จะเริ่มต้นตัวแปรระดับผ่านหนึ่งในหลายตัวสร้างมากเกินไปที่ใช้ประเภทที่แตกต่างกันเป็นพารามิเตอร์ ฉันได้อ่านแล้วว่าการใช้autoคำหลักนั้นสามารถใช้สำหรับการประกาศอัตโนมัติของตัวแปรได้อย่างไรก็ตามในกรณีของฉันมันจะไม่ถูกกำหนดค่าเริ่มต้นจนกว่าจะเลือกคอนสตรัคเตอร์ แต่คอมไพเลอร์ไม่ได้มีความสุขเกี่ยวกับการไม่ valueinitialising class Token { public: auto value; Token(int ivalue) { value = ivalue; } Token(float fvalue) { value = fvalue; } Token(std::string svalue) { value = svalue; } void printValue() { std::cout << "The token value is: " << value << std::endl; } }; …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.