在学习C++将近7个月的时间里,我一直好奇什么时候应该显式地指定模板参数,特别是函数模板。
std::forward就是一个这样的例子,应该提供类型模板参数(std::forward<Type>(arg))。
通常,模板参数是通过函数参数类型推导出来的,如:
template <typename T>
void lets_try(T x);
...
lets_try(5) // lets_try<int>(5);或者,为了避免推导,我通常使用std::type_identity_t
template <typename T>
void lets_try(std::type_identity_t<T> x);
...
lets_try(5) // error
lets_try<int>(5) // ok这是我仅有的一件事。
同样,我的问题是,何时应该显式指定模板参数?显式指定它们有什么好处?
发布于 2021-06-25 00:31:09
什么时候应该显式指定模板参数?
当您实际需要显式地指定它们时。否则,只要有可能,就让编译器为您推断它们。
有时,您可能需要指定模板参数来解决歧义。
有时,您可能需要指定模板参数,以便在给定情况下使用特定类型/值,例如,当您需要一个与给定输入值不同(但与其可转换)不同的类型时(例如:当std::max<int64_t>(a, b)和b是不同类型时使用std::max(),因为std::max()只有两个参数的一个模板参数)。
有时,您可能需要指定与任何函数参数无关的模板参数,因此无法推导。
https://stackoverflow.com/questions/68124022
复制相似问题