我只是好奇:
在下面的示例中,我展示了我的意思,而不是/*implicit*/
. 有没有办法让它留空?如您所见,typename T 不能是第一个。
template<typename C1, typename C2, typename T = decltype(typename C1::value_type() * typename C2::value_type())>
T dot(const C1 &v1, const C2 &v2);
int main()
{
std::vector<float> vec1;
std::vector<double> vec2;
// typical:
auto result1 = dot(vec1, vec2); // auto -> double
// avoid numerical unstable situations:
auto result2 = dot</*implicit*/,/*implicit*/,long double>(vec1, vec2); // auto -> long double
//auto result2 = dot<decltype(vec1),decltype(vec2),long double>(vec1, vec2);
}
在最后一行,我提供了一个解决方案,女巫不是超级臃肿。