c++ 嵌套模版

参考博客:https://learn.microsoft.com/zh-cn/cpp/cpp/templates-cpp?view=msvc-170

模板作为模板参数 模板可以是模板参数。 在此示例中,MyClass2 有两个模板参数:类型名称参数 T 和模板参数 Arr:

C++

template<typename T, template<typename U, int I> class Arr>
class MyClass2
{
    T t; //OK
    Arr<T, 10> a;
    U u; //Error. U not in scope
};

由于 Arr 参数本身没有正文,因此不需要其参数名称。 事实上,从 MyClass2 的正文中引用 Arr 的类型名称或类参数名称是错误的。 因此,可以省略 Arr 的类型参数名称,如以下示例所示:

C++

template<typename T, template<typename, int> class Arr>
class MyClass2
{
    T t; //OK
    Arr<T, 10> a;
};

啊?真的有人写这种代码???

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

template<class T>
class Stu {
public:
    Stu(T v) : value(v) {}
    T value;
    string str() { return to_string(value); }
};

template <typename T1, template<typename> class S>
void show(T1 t1, S<T1> s1) {
    cout<<t1<<endl;
    cout<<s1.str()<<endl;
}

int main() {
    show(10, Stu<int>(99));
    return 0;
}

文章目录