请考虑以下代码,其中有一个模板规范,用于引用结构。似乎该函数无法识别该规范,并继续使用原始模板定义。
如果我摆脱了模板规范中的<!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>
运算符,我就会得到一个有效的程序。
&
答案 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);