Rust中是否有一个功能可以实现这样的功能?据我所知,Rust的泛型函数不可能实现这一点,因为它们只适用于数据类型,而不适用于值.
#include <iostream>
template<int T>
int foo(int a)
{
return -1;
}
template<>
int foo<2>(int a)
{
return a*a;
}
template<>
int foo<3>(int a)
{
return a*a*a;
}
int main()
{
std::cout << "foo<1>(3): "<<foo<1>(3) << std::endl;
std::cout << "foo<2>(3): "<<foo<2>(3) << std::endl;
std::cout << "foo<3>(3): "<<foo<3>(3) << std::endl;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
结果:
foo<1>(3): -1
foo<2>(3): 9
foo<3>(3): 27
Run Code Online (Sandbox Code Playgroud)
TL; DR:还没有,也许永远不会.
Rust泛型并不像C++模板那样强大,也可能永远不会.
具体来说,需要两个功能:
注意:目前尚不清楚专业化的进展程度如何; 在这种使用完全专业化的特定情况下,它应该足够了,但是不清楚是否将实现部分专业化以及如何实现.
还有其他缺失的部分,但与此案例无关:
template <...> using ... = ...;并允许模拟模板模板参数,嘲笑Rust开发人员很容易,或者因为缺乏成熟而耸耸肩; 这也是不正确的.
正如我所提到的,目前尚不清楚Rust是否会获得其中的一些功能,不是因为开发人员无法实现它们,他们当然可以,他们当然可以,但是因为人们非常注重做正确的事情1.
例如,专业化是C++中的一场噩梦.使用一组参数A实例化模板是未定义的行为,稍后(或在另一个翻译单元中)以与A匹配的方式对其进行专门化.对于函数,这通常表现为链接器选择泛型或专用版本...随机.调试并不好玩.
对泛型的任何修改都会对类型系统的其余部分产生巨大的潜在影响,与其他语言特性的复杂交互以及对类型良好的程序意味着什么的重大改变:
简而言之,Rust开发人员正在尝试构建一个有原则的泛型系统,这并不容易.
1 还有一些关于不必要复杂性的问题,因此功能不是"仅仅因为",而是需要激励用例,这些用例应足以证明语言和编译器的额外复杂性; 但这完全是另一个门.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |