C ++在模板参数中传递模板的构造函数值
C++ Passing template's constructor value in template's parameter
我正在尝试将 class 作为模板参数传递。但是这个 class 只有一个强制构造函数,我们必须在其中传递一个整数值。所以我试图找到一种方法来初始化模板的构造函数参数。
#include <iostream>
template <class F>
class Class1 {
public:
int i = 0;
F f;
Class1() { i = f.u; }
};
class Class2 {
public:
int u = 5;
Class2(int j) { u = j; }
};
int main() {
Class1 <Class2>c;
std::cout << c.i << std::endl;
}
当然,这给了我一个错误"Class2 no appropriate default constructor available"。说我想用构造函数传递不同的 classes,而这些构造函数在 Class1 的模板中没有相同数量的参数,有没有办法初始化模板的构造函数?我正在寻找类似 Class1 c;
的东西
Class1 c;
将无法作为通用解决方案。如果不同的 F
将具有不同的构造函数,您需要在某处指定要传递给该构造函数的内容。
一种似乎有意义的方法是将参数从 Class1
的构造函数转发给 F
。
如果 F
有一个默认构造函数,您将能够构造 Class1
而无需传递任何内容。
#include <iostream>
template <class F>
class Class1 {
public:
int i = 0;
F f;
template <typename... Args>
Class1(Args&&... args) : f(std::forward<Args>(args)...) { i = f.u; }
};
class Class2 {
public:
int u = 5;
Class2(int j) { u = j; }
Class2() = default;
};
int main() {
Class1<Class2> c(10);
Class1<Class2> c2;
std::cout << c.i << " " << c2.i << std::endl;
}
我正在尝试将 class 作为模板参数传递。但是这个 class 只有一个强制构造函数,我们必须在其中传递一个整数值。所以我试图找到一种方法来初始化模板的构造函数参数。
#include <iostream>
template <class F>
class Class1 {
public:
int i = 0;
F f;
Class1() { i = f.u; }
};
class Class2 {
public:
int u = 5;
Class2(int j) { u = j; }
};
int main() {
Class1 <Class2>c;
std::cout << c.i << std::endl;
}
当然,这给了我一个错误"Class2 no appropriate default constructor available"。说我想用构造函数传递不同的 classes,而这些构造函数在 Class1 的模板中没有相同数量的参数,有没有办法初始化模板的构造函数?我正在寻找类似 Class1 c;
的东西Class1 c;
将无法作为通用解决方案。如果不同的 F
将具有不同的构造函数,您需要在某处指定要传递给该构造函数的内容。
一种似乎有意义的方法是将参数从 Class1
的构造函数转发给 F
。
如果 F
有一个默认构造函数,您将能够构造 Class1
而无需传递任何内容。
#include <iostream>
template <class F>
class Class1 {
public:
int i = 0;
F f;
template <typename... Args>
Class1(Args&&... args) : f(std::forward<Args>(args)...) { i = f.u; }
};
class Class2 {
public:
int u = 5;
Class2(int j) { u = j; }
Class2() = default;
};
int main() {
Class1<Class2> c(10);
Class1<Class2> c2;
std::cout << c.i << " " << c2.i << std::endl;
}