我已经解决了许多类似但不完全相同的问题。我已经用“经过的”方法实现了一个简单的计时器类,默认情况下,“经过的”方法本身就以所需的返回类型和单位为模板。
但是在可能需要进行持续时间算术的情况下,我希望经过的函数也能够返回持续时间。因此,我尝试使用常规功能“超载”模板。
// timer.hpp
#pragma once
#include <chrono>
template <typename clock_t> class timer {
// ... //
public:
template <typename rep_t, typename unit_t>
rep_t elapsed() const; // templated version
typename clock_t::duration elapsed() const; // non-templated version
};
template <typename clock_t>
template <typename rep_t, typename unit_t>
rep_t timer<clock_t>::elapsed() const {
// Evaluates a duration and casts it to rep_t
}
template <typename clock_t>
typename clock_t::duration timer<clock_t>::elapsed() const {
// Returns the duration directly
}
这似乎可行,不应有任何歧义。正确的函数被调用。但是,由于我找不到足够的示例,因此我想知道这种“超载”是否合法,是否存在歧义,其他问题等。
编辑:清除示例代码。
编辑2:删除了默认模板参数。