模板元编程之关键字typename(四)

发布时间 2023-06-30 00:10:37作者: TechNomad

typename的常见用法

#include <iostream>

template <typename T>
T AddFunc(const T& a, const T& b) {
    return (a + b);
}

int main() {
    std::cout << AddFunc(10, 20) << std::endl;

    return 0;
}

在上述的示例中,typename与class的作用是一致的,换句话说可以使用class替换typename。

在C++标准化过程中,引入关键字typename是为了说明:在模板内部的标志符可以是一个类型,如下述示例:

template <typename T>
class MyClass {
    typename T::SubType* ptr;
    ...
};

上面的示例中,内部的typename被用来说明SubType是定义于类T内部的一种类型,因此,ptr是一个执行T::SubType类型的指针,如果不使用typename,SubType就会被认为是一个静态成员,那么它应该是一个具体的变量或对象。于是T::SubType*ptr会被看作是类T的静态成员SubType和ptr的乘积,通常而言,当某个依赖于模板参数的名称是一个类型时,就应该使用typename。

参考:https://feihu.me/blog/2014/the-origin-and-usage-of-typename/