I have a class and a nested class in C and they are both generic classes.
#define GENERIC template<typename T>
GENERIC
class Class1 final{
private:
GENERIC
class Class2 final{
private:
T class2Field{};
};
T class1Field{};
};
I want to pass the type parameter T that is passed to Class1 when instantiating it, all the way to the Class 2. How can I achieve that?
CodePudding user response:
How to pass generic arguments to the nested generic classes in C
Since the nested class is also templated, you can make use of default argument as shown below:
template<typename T>
class Class1 {
private:
//-----------vvvvvvvvvvvvvv---->use default argument
template<typename U = T>
class Class2 {
private:
U class2Field{};
};
T class1Field{};
};
Now Class1<int>::Class2::class2Field will be of type int.
CodePudding user response:
Class2 can see the declaration of Class1, therefore will use Class1's T when not declared a templated class:
template<typename T>
class Class1 final {
private:
class Class2 final {
private:
T class2Field{};
};
T class1Field{};
};
so Class1<int>::Class2::class2Field will be of type int.
If you want Class2 still to be a templated class, see this answer.
better not use macros: Why are preprocessor macros evil and what are the alternatives?.
