我想写4个大的C方法,它们只与简单的运算符(+,-,*,/)不同,这些运算符出现在定义中的某些特定位置。
我不想写4个方法,我想用一个代码块来说明这些方法的逻辑基本相同,只是运算符不同。这样也更容易修复或改进逻辑。
我还想通过像模板函数一样编译方法来使方法运行得更快(因为它们被大量使用)。所以,我不满意将表示操作符的lambda函数参数添加到单个方法(或在选择操作符时测试类别参数)的想法。
有没有什么方法可以实现我想要的一个有模板参数的方法?也许,有可能在某种程度上将操作符转换为不同的类型以匹配模板逻辑?
我用的是C14。
1条答案
按热度按时间voase2hg1#
Lambdas和函数模板是最惯用的解决方案:
字符串
这编译为(https://godbolt.org/z/oa5b8xj55):
型
在这种情况下,lambda不会降低代码的速度,因为每个lambda都有不同的类型,
op(...)
可以很容易地内联。具体来说,在
foo
的特殊化中,比如foo<__lambda>(__lambda, int, int)
,op(...)
转换为调用__lambda::operator()(int, int) const
。由于调用操作符的定义是可见的,并且lambda没有捕获,所以优化很容易。<algorithm>
头文件中的许多函数都具有相同的设计。