为什么此模板规范不起作用以供参考?

时间:2018-09-28 14:42:54

标签: c++ templates

请考虑以下代码,其中有一个模板规范,用于引用结构。似乎该函数无法识别该规范,并继续使用原始模板定义。

如果我摆脱了模板规范中的<!DOCTYPE html> <html> <head> <title>TinyMCE - Setup</title> <!-- javascript --> <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="plugin/tinymce/tinymce.min.js"></script> <script type="text/javascript" src="plugin/tinymce/init-tinymce.js"></script> <script type="text/javascript" src="plugin/tinymce/jquery.tinymce.min.js"></script> <script type="text/javascript" src="js/getdata.js"></script> <link href="https://fonts.googleapis.com/css?family=Roboto+Slab:300,400,700" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="formatting.css"> </head> <body> <table class="prevFrame"> <tr><td > <form id="get-data-form" method="post"> <textarea class="tinymce" id="texteditor"></textarea> <input type="submit" value="Preview"> </form> </td> <td> <div id="poster-div" class="posterPrev"> <div class="header">header</div> <div id="data-content"> <div id="data-container"></div> </div> <div class="footer">footer</div> </div> </td></tr> </table> </body> </html>运算符,我就会得到一个有效的程序。

&

1 个答案:

答案 0 :(得分:4)

Template argument deduction是很复杂的事情,在限定词,引用之间等等。您很容易迷路。

您可以在此处将模板函数定义为采用通用引用:

struct point
{
    double x;
    double y;
};

template <typename T>
T larger(T&& a, T&& b)
{
    return a > b ? a : b;
}

template<> point& larger(point& p1, point& p2) 
{
    return p1.x*p1.y > p2.x * p2.y ? p1 : p2;
}

int main()
{   
    point p = { 1.1, 2.2 };
    point& rp = p;
    point max = larger(rp, rp); // deduced: point& larger<point&>(point&, point&)
}

演示:http://coliru.stacked-crooked.com/a/78441512a5fa85aa


或者您可以完全避免模板参数推导:

template <typename T>
T larger(T a, T b)
{
    return a > b ? a : b;
}
// ...
point max = larger<point&>(rp, rp);