【发布时间】:2019-06-04 23:12:15
【问题描述】:
我想看看是否有可能(尽管我感觉不可能)是否有可能根据给定的第一个模板参数应用统一类型。例如:
template <class T>
void foo(T, T) {}
int main() {
// deduced as int
foo(1, 1);
// deduced as double
foo(1.0, 1.0);
// not deducible, will error.
//foo(1.0, 1);
return 0;
}
是否有一些技术可以让我将 foo 的第二个参数强制为第一个?我确实意识到规范的解决方案是foo<double>(1.0, 1)。
话虽如此,我希望能够执行foo(1.0, 1),这将强制将第二个参数类型作为第一个,并将 1 向上转换为 1.0。
此外,foo(1, 1.0) 会失败,因为第一个参数将 foo 设置为 foo<int>,因此第二个参数不能向下转换为 int。
最后,我希望能够在没有递归模板化的情况下做到这一点,因为我想将此技术应用于对象构造函数。
【问题讨论】:
标签: templates c++17 template-argument-deduction