c++ - 类模板参数默认值

标签 c++

标准 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/

相关文章:

c++ - 声明使用 C 代码的 c++ 类的多个实例

c++ - 我们可以将 Rcpp 与多个 C++ 函数一起使用吗?

c++ - boost::make_shared 底层对象和引用计数对象的内存分配大小在哪里?

c++ - 任意表达式中的单冒号?

c++ - Ubuntu 和 Windows 的运行时间差异巨大?

c++ - 访问数据集具有连续名称的 HDF5 文件的最佳方法

c++ - C++中动态数组的赋值运算符

c++ - 为什么gcc/clang要用两个128bit的xmm寄存器来传递一个值?

c++ - 如何捕获构造函数异常?

c++ - 城市环境特征检测的最佳算法——OpenCV