我试图专门设计一个功能模板,但我收到错误(标题)并且我不知道如何解决它。我猜这是由于我在模板专业化中使用的混合类型。这个想法只是在专业化中使用int作为double。非常感谢。
template <typename T>
T test(T x) { return x*x; }
template <>
double test<int>(int x) { return test<double>(x); }
答案 0 :(得分:8)
显式特化“...”不是功能模板的专业化
真。
因为您定义了template <typename T>
T test(T x) { return x*x; }
T
接收T
类型并返回相同的 template <>
double test<int>(int x) { return test<double>(x); }
类型。
定义时
int
您正在定义一个接收double
值并返回其他类型(T test(T)
)的专精。
因此与double test(int x) { return test<double>(x); }
不匹配。
您可以通过重载来解决问题
foreach($div as $divi => $value) {
echo $value['stats']['dividendRate'];
}
答案 1 :(得分:5)
正如您所说,您使用的是返回类型T = double
,但用于参数T = int
,这不是有效的。
您可以做的是提供非模板化的过载:
template<typename T>
T test(T x) { return x*x; }
// regular overload, gets chosen when you call test(10)
double test(int x) { return test<double>(x); }
当然,有人可以随时致电test<int>(/*...*/);
。如果这是不可接受的,只需删除专业化:
template<>
int test(int) = delete;