คำถามติดแท็ก function-templates

13
เทมเพลตฟังก์ชันสมาชิกระดับสามารถเป็นเสมือนได้หรือไม่?
ฉันได้ยินมาว่าแม่แบบฟังก์ชันคลาสสมาชิก C ++ ไม่สามารถเป็นเสมือนได้ มันเป็นเรื่องจริงเหรอ? หากพวกเขาสามารถเป็นเสมือนจริงตัวอย่างของสถานการณ์ที่จะใช้ฟังก์ชั่นดังกล่าวคืออะไร?

4
เหตุใดเทมเพลตฟังก์ชันจึงไม่สามารถใช้เฉพาะบางส่วนได้
ฉันทราบว่าข้อกำหนดภาษาห้ามมิให้มีความเชี่ยวชาญเฉพาะบางส่วนของเทมเพลตฟังก์ชัน ฉันต้องการทราบเหตุผลว่าทำไมจึงห้าม? พวกเขาไม่มีประโยชน์? template<typename T, typename U> void f() {} //allowed! template<> void f<int, char>() {} //allowed! template<typename T> void f<char, T>() {} //not allowed! template<typename T> void f<T, int>() {} //not allowed!

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 …

5
วิธีคืนข้อมูลประเภทที่ถูกต้องในแม่แบบ?
#include <iostream> using namespace std; template <class X, class Y> Y big(X a, Y b) { if (a > b) return (a); else return (b); } int main() { cout << big(32.8, 9); } นี่ฉันกำลังใช้แม่แบบใน CPP ดังนั้นเมื่อผมเรียกใช้ฟังก์ชันbigผ่านการขัดแย้งของdoubleและประเภทผมต้องการคำตอบกลับมาซึ่งเป็นint doubleประเภทของที่นี่ก็จะส่งกลับแทน3232.8 ฉันจะได้รับผลลัพธ์ที่ต้องการได้อย่างไร จะเขียนbigฟังก์ชั่นการส่งคืนที่เหมาะสมได้อย่างไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.