คำถามติดแท็ก dependent-name

6
ฉันต้องใส่คำหลัก“ เทมเพลต” และ“ พิมพ์ชื่อ” ที่ไหนและทำไม
ในแม่ที่และทำไมฉันต้องใส่typenameและtemplateรายชื่อขึ้นอยู่? ชื่อที่ขึ้นต่อกันคืออะไรกันแน่? ฉันมีรหัสต่อไปนี้: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ... template<typename U> struct inUnion { // Q: where to add typename/template here? typedef Tail::inUnion<U> dummy; }; template< > struct inUnion<T> { }; }; template <typename T> // …

2
เหตุใดฟังก์ชันเทมเพลตนี้จึงไม่ทำงานอย่างที่คาดไว้
ฉันอ่านเกี่ยวกับฟังก์ชั่นเทมเพลตและสับสนกับปัญหานี้: #include <iostream> void f(int) { std::cout << "f(int)\n"; } template<typename T> void g(T val) { std::cout << typeid(val).name() << " "; f(val); } void f(double) { std::cout << "f(double)\n"; } template void g<double>(double); int main() { f(1.0); // f(double) f(1); // f(int) g(1.0); // d f(int), this is surprising …

3
เหตุใดจึงไม่จำเป็นต้องใช้ชื่อพิมพ์สำหรับประเภทที่อ้างอิงในกรณีต่อไปนี้
ผมได้อ่านเกี่ยวกับการลบการอ้างอิงจากประเภทที่นี่ มันให้ตัวอย่างต่อไปนี้: #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); print_is_same<int, int &&>(); print_is_same<int, std::remove_reference<int>::type>(); // Why not typename std::remove_reference<int>::type ? print_is_same<int, std::remove_reference<int &>::type>();// Why …

2
C ++ - เหตุใดจึงต้องใช้คำหลัก 'เทมเพลต' ที่นี่
ฉันมีรหัสต่อไปนี้: template <typename TC> class C { struct S { template <typename TS> void fun() const {} }; void f(const S& s) { s.fun<int>(); } }; // Dummy main function int main() { return 0; } เมื่อมีการสร้างนี้มีทั้ง GCC 9.2 และเสียงดังกราว (9.0) ฉันได้รับการรวบรวมข้อผิดพลาดเนื่องจากการคำหลักที่ถูกต้องสำหรับการกล่าวอ้างtemplate funเสียงดังกราวแสดง: error: use 'template' keyword to treat 'fun' …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.