标准 C++ 库中的 time_point
模板类有一个类模板定义:
template<
class Clock,
class Duration = typename Clock::duration
> class time_point;
有人可以解释一下这句话吗:
class Duration = typename Clock::duration
?
我知道我们正在为第二个模板参数 Duration
定义默认值,但我不明白的是 Clock
之后的 ::duration
部分代码 > 类型名称。不应该只是:
class Duration = typename Clock
?
最佳答案
Marek 已经在他的回答中解释了几乎所有内容,这个是为了改进它。
typename
需要告诉编译器“看,持续时间嵌套在 Clock
中并取决于
它,你必须先解析 Clock
然后推导 Clock::duration
"
这里有一个依赖类型的愚蠢示例,不适合在生产代码中使用。
template<typename T>
class MyBase
{
public:
using UnderlyingType = T;
// ...
double foo() { return 5.5; }
};
class MyIntChild : public MyBase<int>{};
class MyDoubleChild : public MyBase<double>{};
template<typename T, typename D = typename T::UnderlyingType>
D makeFoo(T& t)
{
return t.foo();
}
MyIntChild a;
makeFoo<MyIntChild>(); // return 5 because return type is int;
关于c++ - 类模板参数默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65355666/