c++ - C ++在模板参数中传递模板的构造函数值
问题描述
我正在尝试将一个类作为模板参数传递。但是这个类只有一个强制构造函数,我们必须传递一个整数值。所以我试图找到一种方法来初始化模板的构造函数参数。
#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 没有适当的默认构造函数可用”。说我想传递不同的类,构造函数在 Class1 的模板中没有相同数量的参数,有没有办法初始化模板的构造函数?我正在寻找类似 Class1 c 的东西;
解决方案
Class1 c;
将不可能作为一般解决方案。如果不同F
的 s 将有不同的构造函数,则需要在某处指定要传递给该构造函数的内容。
一种似乎有意义的方法是将参数从Class1
s 构造函数转发到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;
}
推荐阅读
- docker - nginx:在 /etc/nginx/nginx.conf:44 的上游“tellform”中找不到 [emerg] 主机
- android - 初始屏幕中的 Ionic 3 状态栏颜色(android)
- ios - Xamarin.iOS 为什么在设备上调试时 HKAnchoredObjectQuery 处于非活动状态然后停用?
- c# - 使用 Web API-Dynamics CRM 将联系人实体关联到多个实体
- c# - 当我调用方法 c# 时,如何将一个元素添加到数组中
- typescript - Ionic InAppBrowser iOS 打开新标签并在 devapp '正在加载...' 屏幕中
- doctrine-orm - Symfony4 UnitTest 中的 Doctrine2 orderBy
- java - 尝试将 Spring MVC 集成到现有的 Jersey API 中,每次 404
- angular - 如何自定义 PrimeNG TurboTable 分页器?
- python - PYQT:如何将自定义信号从主窗口(父)发送到子窗口?