为什么用户定义的转换函数模板不能具有推导的返回类型?

时间:2019-09-11 12:51:01

标签: c++

以下规则的原因是:“用户定义的转换函数模板不能具有推论的返回类型。”

<h6>ONE</h6>
<label><input type="checkbox" name="service[]" value='a' data-value="10"> a 10$</label>
<label><input type="checkbox" name="service[]" value='b' data-value="15"> b 15$</label>
<label><input type="checkbox" name="service[]" value='c' data-value="8"> c 8$</label>
<h6>TWO</h6>
<label><input type="checkbox" name="service[]" value='d' data-value="120"> d 120$</label>
<label><input type="checkbox" name="service[]" value='e' data-value="100"> e 100$</label>
<label><input type="checkbox" name="service[]" value='f' data-value="7"> f 7$</label>
<label><input type="checkbox" name="service[]" value='g' data-value="4"> g 4$</label>
<label><input type="checkbox" name="service[]" value='h' data-value="2"> h 2$</label>
<label><input type="checkbox" name="service[]" value='i' data-value="64"> i 64$</label>
<label><input type="checkbox" name="service[]" value='j' data-value="33"> j 33$</label>
<h6>TOTAL:</h6>
<span id="total"></span>

<script src="//code.jquery.com/jquery-3.4.1.min.js"></script>

1 个答案:

答案 0 :(得分:11)

即使被允许,在第二行中,也没有任何内容取决于模板。 无法调用(在这种情况下,T的目的是什么?)

如果要转换为用户定义的类型,则可以这样做: 假设您有:

struct S
{
   template<typename T> operator T() { return T(42); }
};

很明显,没有必要推论任何东西。 您可以这样称呼:

S s;
int v = s;
float f = s;

请注意,在这种情况下,在上面的代码中使用auto而不是float会阻止编译器推断类型(是float还是{{1 }}和int吗?)。上面的句子简单地解释了这一点。