如何构造具有相同参数的嵌套 class 模板的对象?
How to construct objects of nested class templates with the same argument?
如何构造具有相同参数的嵌套 class 模板的对象?
如何编写构造函数使下面的代码通过?
template<typename T>
struct S {
T v;
S(T v) : v{v} {}
};
int main() {
S<int>{0}; // OK.
S<S<int>>{0}; // OK.
S<S<S<int>>>{0}; // Compilation error. I want this to compile.
S<S<S<S<int>>>>{0}; // Compilation error. I want this to compile.
// ... // I want more...
}
编译错误:
no matching constructor for initialization of 'S<S<S<int> > >'
no matching constructor for initialization of 'S<S<S<S<int> > > >'
您可以添加第二个转换构造函数。如果您想支持任何类型,只需将此构造函数模板化即可:
template <typename T>
struct S {
T v;
S(T v) : v{v} {}
template <typename U>
S(U v) : v{v} {}
};
本作品如下:
S<int>{0};
S<S<int>>{0};
S<S<S<int>>>{0};
S<S<S<S<int>>>>{0};
S<double>{0.0};
S<S<double>>{0.0};
S<S<S<double>>>{0.0};
S<S<S<S<double>>>>{0.0};
现场演示:https://godbolt.org/z/NKEGRz
请注意,在最底层,两种构造函数都适用,但将根据 C++ 重载规则选择非模板构造函数。
如何构造具有相同参数的嵌套 class 模板的对象?
如何编写构造函数使下面的代码通过?
template<typename T>
struct S {
T v;
S(T v) : v{v} {}
};
int main() {
S<int>{0}; // OK.
S<S<int>>{0}; // OK.
S<S<S<int>>>{0}; // Compilation error. I want this to compile.
S<S<S<S<int>>>>{0}; // Compilation error. I want this to compile.
// ... // I want more...
}
编译错误:
no matching constructor for initialization of 'S<S<S<int> > >'
no matching constructor for initialization of 'S<S<S<S<int> > > >'
您可以添加第二个转换构造函数。如果您想支持任何类型,只需将此构造函数模板化即可:
template <typename T>
struct S {
T v;
S(T v) : v{v} {}
template <typename U>
S(U v) : v{v} {}
};
本作品如下:
S<int>{0};
S<S<int>>{0};
S<S<S<int>>>{0};
S<S<S<S<int>>>>{0};
S<double>{0.0};
S<S<double>>{0.0};
S<S<S<double>>>{0.0};
S<S<S<S<double>>>>{0.0};
现场演示:https://godbolt.org/z/NKEGRz
请注意,在最底层,两种构造函数都适用,但将根据 C++ 重载规则选择非模板构造函数。