如何在C++中将泛型参数传递给嵌套泛型类

qltillow  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(179)

我在C++中有一个类和一个嵌套类,它们都是泛型类。

#define GENERIC template<typename T>
    
GENERIC
class Class1 final{
private:
    GENERIC
    class Class2 final{
    private:
        T class2Field{};
    };

    T class1Field{};
};

我想传递类型参数T,它在示例化Class1时传递给Class1,一直传递到Class 2。如何实现?

gpnt7bae

gpnt7bae1#

如何在C++中将泛型参数传递给嵌套泛型类
由于嵌套类也是模板化的,因此可以使用默认参数,如下所示:

template<typename T>
class Class1 {
private:
//-----------vvvvvvvvvvvvvv---->use default argument
    template<typename U = T>
    class Class2 {
    private:
        U class2Field{};
    };

    T class1Field{};
};

现在Class1<int>::Class2::class2Field的类型将为int

von4xj4u

von4xj4u2#

Class2可以看到Class1的声明,因此将使用Class1T在没有声明模板化类时:

template<typename T>
class Class1 final {
private:
    class Class2 final {
    private:
        T class2Field{};
    };

    T class1Field{};
};

因此Class1<int>::Class2::class2Field将是int类型。
如果您希望Class2仍然是模板类,请参见this answer
最好不要使用宏:是的。

相关问题