我可以使用具有不同返回类型的常规函数​​来重载函数模板吗?

时间:2018-10-16 23:04:46

标签: c++

我已经解决了许多类似但不完全相同的问题。我已经用“经过的”方法实现了一个简单的计时器类,默认情况下,“经过的”方法本身就以所需的返回类型和单位为模板。

但是在可能需要进行持续时间算术的情况下,我希望经过的函数也能够返回持续时间。因此,我尝试使用常规功能“超载”模板。

// 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:删除了默认模板参数。

0 个答案:

没有答案