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

เทมเพลตแท็กใช้ในหลายบริบท: การเขียนโปรแกรมทั่วไป (โดยเฉพาะ C ++) และการสร้างข้อมูล / เอกสารโดยใช้เทมเพลตเอนจิ้น เมื่อใช้แท็กนี้กับคำถามที่มีการใช้งานหนัก - ติดแท็กรหัสภาษาที่มีการใช้งาน

6
เทมเพลต Angularjs ค่าเริ่มต้นหากการเชื่อมโยง Null / ไม่ได้กำหนด (พร้อมตัวกรอง)
ฉันมีการโยงเทมเพลตที่แสดงคุณลักษณะของโมเดลที่เรียกว่า 'date' ซึ่งเป็นวันที่โดยใช้ตัวกรองวันที่ของ Angular <span class="gallery-date">{{gallery.date | date:'mediumDate'}}</span> จนถึงตอนนี้ดีมาก อย่างไรก็ตามในขณะนี้หากไม่มีค่าในฟิลด์วันที่การรวมจะไม่แสดงผลใด ๆ อย่างไรก็ตามฉันต้องการให้แสดงสตริง 'ต่าง ๆ ' หากไม่มีวันที่ ฉันสามารถรับตรรกะพื้นฐานโดยใช้ตัวดำเนินการแบบไบนารี: <span class="gallery-date">{{gallery.date || 'Various'}}</span> อย่างไรก็ตามฉันไม่สามารถใช้งานกับตัวกรองวันที่ได้: <span class="gallery-date">{{gallery.date | date:'mediumDate' || "Various"}}</span> ฉันจะใช้ตัวดำเนินการไบนารีข้างตัวกรองวันที่ได้อย่างไร

5
จะตรวจสอบว่าตัวแปรมีอยู่ในเทมเพลต FreeMarker ได้อย่างไร?
ฉันมีเทมเพลต Freemarker ซึ่งมีตัวแทนตัวยึดมากมายซึ่งค่าจะได้รับเมื่อประมวลผลแม่แบบ ฉันต้องการรวมเป็นส่วนหนึ่งของแม่แบบตามเงื่อนไขหากมีการให้ตัวแปรชื่อผู้ใช้สิ่งที่ชอบ: [#if_exists userName] Hi ${userName}, How are you? [/#if_exists] อย่างไรก็ตามคู่มือ FreeMarker ดูเหมือนจะบ่งบอกว่า if_exists เลิกใช้แล้ว แต่ฉันไม่สามารถหาวิธีอื่นเพื่อให้ได้สิ่งนี้ แน่นอนฉันสามารถให้ตัวแปรบูลีน isUserName อย่างง่าย ๆ และใช้สิ่งนี้: [#if isUserName] Hi ${userName}, How are you? [/#if] แต่ถ้ามีวิธีตรวจสอบว่ามีชื่อผู้ใช้อยู่หรือไม่ฉันสามารถหลีกเลี่ยงการเพิ่มตัวแปรพิเศษนี้ได้

3
ทำไมฉันควรหลีกเลี่ยง std :: enable_if ในฟังก์ชันลายเซ็น
Scott Meyers โพสต์เนื้อหาและสถานะของหนังสือเล่มต่อไปของเขา EC ++ 11 เขาเขียนว่าหนึ่งรายการในหนังสือเล่มนี้อาจจะ"หลีกเลี่ยงการstd::enable_ifอยู่ในลายเซ็นฟังก์ชั่น" std::enable_if สามารถใช้เป็นอาร์กิวเมนต์ฟังก์ชั่นเป็นประเภทผลตอบแทนหรือเป็นแม่แบบชั้นเรียนหรือพารามิเตอร์แม่แบบฟังก์ชั่นเพื่อลบฟังก์ชั่นหรือคลาสจากเงื่อนไขการแก้ไขเกินพิกัด ในคำถามนี้จะแสดงคำตอบทั้งสาม พารามิเตอร์ฟังก์ชั่น: template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< std::is_same<U, int>::value >::type* = 0) { return 42; } template<typename U = T> U read(typename std::enable_if< std::is_same<U, double>::value >::type* = 0) { return 3.14; } }; เป็นพารามิเตอร์เทมเพลต: …

13
วิธีการดีบักตัวแปรใน Smarty เช่นเดียวกับใน PHP var_dump ()
ฉันมีตัวแปรภายในเทมเพลตและฉันไม่รู้ว่าฉันกำหนดไว้ที่ไหน ฉันจำเป็นต้องรู้ว่าอะไรอยู่ในตัวแปรเฉพาะ เช่นบอกว่าฉันมีตัวแปรใน Smarty memberเรียกว่า ฉันลองด้วย{debug}แต่มันใช้งานไม่ได้และไม่มีป๊อปอัปปรากฏขึ้น ฉันจะส่งออก / แก้จุดบกพร่องตัวแปร smarty โดยใช้สิ่งที่ต้องการvar_dump()ภายในแม่แบบได้อย่างไร

7
std :: function vs template
ขอบคุณ C ++ 11 ที่เราได้รับการstd::functionห่อหุ้มของ functor น่าเสียดายที่ฉันได้ยิน แต่เรื่องเลวร้ายเกี่ยวกับการเพิ่มสิ่งใหม่เหล่านี้เท่านั้น ความนิยมมากที่สุดคือพวกเขาช้าอย่างน่ากลัว ฉันทดสอบมันและพวกเขาดูดอย่างแท้จริงเมื่อเปรียบเทียบกับแม่แบบ #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const …

14
เทมเพลต C ++ ที่ยอมรับเฉพาะบางประเภท
ใน Java คุณสามารถกำหนดคลาสทั่วไปที่ยอมรับเฉพาะประเภทที่ขยายคลาสที่คุณเลือกเช่น: public class ObservableList<T extends List> { ... } ทำได้โดยใช้คำหลัก "ขยาย" มีบางอย่างที่เทียบเท่ากับคำหลักนี้ใน C ++?
158 c++  templates 

7
std :: enable_if เพื่อคอมไพล์ฟังก์ชันสมาชิกแบบมีเงื่อนไข
std::enable_ifฉันพยายามที่จะได้รับตัวอย่างง่ายๆในการทำงานจะเข้าใจวิธีการใช้งาน หลังจากที่ฉันอ่านคำตอบนี้ฉันคิดว่ามันไม่ควรยากเกินไปที่จะเกิดขึ้นกับตัวอย่างง่ายๆ ฉันต้องการใช้std::enable_ifเพื่อเลือกระหว่างสองฟังก์ชั่นสมาชิกและอนุญาตให้ใช้หนึ่งในนั้นเท่านั้น น่าเสียดายที่สิ่งต่อไปนี้ไม่ได้รวบรวมกับ gcc 4.7 และหลังจากเวลาผ่านไปหลายชั่วโมงของการลองฉันถามพวกคุณว่าสิ่งที่ฉันผิดคืออะไร #include <utility> #include <iostream> template< class T > class Y { public: template < typename = typename std::enable_if< true >::type > T foo() { return 10; } template < typename = typename std::enable_if< false >::type > T foo() { return 10; } }; …
156 c++  templates  g++  c++11 

3
เมื่อใดที่จะใช้ std :: forward เพื่อส่งต่อข้อโต้แย้ง?
C ++ 0x แสดงตัวอย่างการใช้std::forward: template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } เมื่อใดจึงจะใช้ประโยชน์std::forwardเสมอ นอกจากนี้ยังจำเป็นต้องใช้&&ในการประกาศพารามิเตอร์มันถูกต้องในทุกกรณี? ฉันคิดว่าคุณจะต้องส่งผ่านฟังก์ชั่นชั่วคราวหากฟังก์ชั่นนั้นถูกประกาศไว้&&ในนั้นดังนั้นฟูสามารถถูกเรียกด้วยพารามิเตอร์ใด ๆ ได้หรือไม่? สุดท้ายถ้าฉันมีฟังก์ชั่นการโทรเช่นนี้ template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } ฉันควรใช้สิ่งนี้แทน: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } นอกจากนี้หากใช้พารามิเตอร์สองครั้งในฟังก์ชั่นเช่นการส่งต่อไปยังสองฟังก์ชั่นในเวลาเดียวกันควรใช้std::forwardหรือไม่? จะไม่std::forwardแปลงสิ่งเดียวกันเป็นสองครั้งชั่วคราวย้ายหน่วยความจำและทำให้ไม่ถูกต้องสำหรับการใช้งานครั้งที่สอง? รหัสต่อไปนี้จะโอเคไหม template<int val, typename... Params> void doSomething(Params&&... …

3
ทำไมต้องใช้“ b <a? a: b” แทนที่จะเป็น“ a <b? b: a” เพื่อสร้างเทมเพลตสูงสุด?
เทมเพลต C ++ - คู่มือฉบับสมบูรณ์ฉบับที่ 2แนะนำเทมเพลตสูงสุด : template&lt;typename T&gt; T max (T a, T b) { // if b &lt; a then yield a else yield b return b &lt; a ? a : b; } และมันอธิบายการใช้“b &lt; a ? a : b”แทน“a &lt; b ? b : a”: โปรดทราบว่าเทมเพลตสูงสุด …
154 c++  templates 

13
อะไรคือความแตกต่างระหว่างชนิด“ ทั่วไป” ใน C ++ และ Java
Java มี generics และ C ++ ให้รูปแบบการเขียนโปรแกรมที่แข็งแกร่งมากกับtemplates ดังนั้นอะไรคือความแตกต่างระหว่าง C ++ และ Java generics?

4
อาร์กิวเมนต์เริ่มต้นของเทมเพลต
หากฉันได้รับอนุญาตให้ทำสิ่งต่อไปนี้: template &lt;typename T = int&gt; class Foo{ }; ทำไมฉันไม่ได้รับอนุญาตให้ทำสิ่งต่อไปนี้ในหลัก Foo me; แต่ฉันต้องระบุสิ่งต่อไปนี้: Foo&lt;int&gt; me; C ++ 11 นำเสนอข้อโต้แย้งแม่แบบเริ่มต้นและตอนนี้พวกเขากำลังเข้าใจความเข้าใจของฉันอย่างสมบูรณ์
151 c++  templates 

2
`void_t` ทำงานอย่างไร
ผมเฝ้าดูการพูดคุยวอลเตอร์บราวน์ที่ Cppcon14 เกี่ยวกับการเขียนโปรแกรมแม่แบบที่ทันสมัย ( Part I , Part II ) ที่เขานำเสนอของเขาvoid_tเทคนิค SFINAE ตัวอย่าง: กำหนดเทมเพลตตัวแปรแบบง่ายที่ประเมินvoidว่าถ้าอาร์กิวเมนต์เท็มเพลตทั้งหมดมีรูปแบบที่ดี: template&lt; class ... &gt; using void_t = void; และลักษณะต่อไปนี้ที่ตรวจสอบการมีอยู่ของตัวแปรสมาชิกที่เรียกว่าสมาชิก : template&lt; class , class = void &gt; struct has_member : std::false_type { }; // specialized as has_member&lt; T , void &gt; or discarded (sfinae) template&lt; class …
149 c++  templates  c++14  sfinae 

3
การเริ่มต้นสมาชิกแบบคงที่ในเทมเพลตคลาส
ฉันต้องการทำสิ่งนี้: template &lt;typename T&gt; struct S { ... static double something_relevant = 1.5; }; แต่ฉันทำไม่ได้เนื่องจากsomething_relevantไม่ใช่ประเภทที่สมบูรณ์ มันไม่ได้ขึ้นอยู่กับแต่รหัสที่มีอยู่ขึ้นอยู่กับมันเป็นสมาชิกคงที่ของTS เนื่องจาก S เป็นแม่แบบฉันไม่สามารถใส่คำจำกัดความไว้ในไฟล์ที่คอมไพล์ได้ ฉันจะแก้ปัญหานี้ได้อย่างไร
148 c++  templates  static 

4
จะสร้างฟังก์ชั่นเทมเพลตภายในคลาสได้อย่างไร? (C ++)
ฉันรู้ว่าเป็นไปได้ที่จะสร้างฟังก์ชันแม่แบบ: template&lt;typename T&gt; void DoSomeThing(T x){} และเป็นไปได้ที่จะสร้างคลาสเทมเพลต: template&lt;typename T&gt; class Object { public: int x; }; แต่เป็นไปได้ไหมที่จะทำให้คลาสไม่ได้อยู่ในเทมเพลตจากนั้นสร้างฟังก์ชันในคลาสนั้นเป็นเทมเพลต? เช่น: //I have no idea if this is right, this is just how I think it would look class Object { public: template&lt;class T&gt; void DoX(){} }; หรืออะไรบางอย่างในระดับที่ชั้นไม่ได้เป็นส่วนหนึ่งของแม่แบบ แต่ฟังก์ชั่นคืออะไร?
144 c++  templates  function  class 

10
วิธีการจำลองการเริ่มต้นอาร์เรย์ C“ int arr [] = {e1, e2, e3, …}” พฤติกรรมกับ std :: array?
(หมายเหตุ: คำถามนี้เป็นคำถามเกี่ยวกับการไม่ต้องระบุจำนวนขององค์ประกอบและยังคงอนุญาตให้มีชนิดที่ซ้อนกันที่จะเริ่มต้นได้โดยตรง.) คำถามนี้กล่าวถึงการใช้งานที่เหลือสำหรับอาร์เรย์ C int arr[20];เช่น ในคำตอบของเขา @James Kanze แสดงหนึ่งในฐานที่มั่นสุดท้ายของอาร์เรย์ C มันเป็นลักษณะการเริ่มต้นที่ไม่ซ้ำกัน: int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 }; เราไม่ต้องระบุจำนวนองค์ประกอบไชโย! ทีนี้วนซ้ำด้วยฟังก์ชัน C ++ 11 std::beginและstd::endจาก&lt;iterator&gt;( หรือตัวแปรของคุณเอง ) และคุณไม่จำเป็นต้องคิดถึงขนาดของมัน ตอนนี้มีวิธีใดบ้าง (ที่เป็นไปได้ของ TMP) ในการบรรลุเป้าหมายเดียวกันstd::arrayหรือไม่? อนุญาตให้ใช้มาโครเพื่อทำให้ดูดีขึ้น :) ??? std_array = { …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.