【发布时间】:2020-09-03 00:48:26
【问题描述】:
所以我有了这个小模板类:
template <typename T, typename std::enable_if<std::is_arithmetic<T>{} || std::is_same<T, std::chrono::duration<int64_t, std::nano>>{}, int>::type = 0>
class Accumulator
{
public:
void Sample(const T value) {
value_ = Convert(value);
}
private:
float value_;
}
它需要适用于所有算术类型和std::chrono::duration<int64_t, std::nano> 类型。里面有一些数学运算要做,所以所有传递给Sample()方法的值都必须转换为float。
编写这个Convert() 函数的好方法是什么?我尝试为std::chrono::duration<int64_t, std::nano> 类型编写完整版本的Accumulator,但它看起来像代码重复。制作特定的Convert(std::chrono::duration<int64_t, std::nano> value) 不适用于不同版本的Convert(T value)。
gcc 9.3.0 上的 C++14。
【问题讨论】:
-
我看不出
Convert会有什么问题 -
将非引用参数作为
const有点没有意义。您已经向调用者保证您不会改变他们传入的内容,因为您正在按值获取参数。