c++ - 在模板类型名上调用自定义构造函数
问题描述
假设我有以下代码:
Class A
{
public:
A(B* b)
: m_B(*b)
{}
//Default constructor won't work as it needs to initialize "m_B"
private:
B& m_B;
};
然后我有一个B类:
class B
{
public:
//check that typename is a derivative of A
template<typename T>
AddInstance()
{
T* instance = new T(this);
m_Instances.emplace_back(instance);
}
private:
std::vector<A*> m_Instances;
};
在这种情况下,我必须AddInstance
使用可以初始化的构造函数来构造 A 类m_B
。然而,当我这样做时(并且我使用以下概念确保 typename 从 A 派生
template<typename T> concept Derivative = std::is_base_of<A, T>::value;
:)除了默认构造函数之外,我无法初始化 typename 变量。如果我确定 typename 继承自 A,有没有办法通过重载的构造函数对其进行初始化?
注意:在我的项目中,类 A 将是一个抽象类,因此类型名将是 A 的专门派生词,我将其放入向量中
编辑 所以我想出了我的问题。我假设继承类能够从其基类调用构造函数。相反,派生类需要创建自己的构造函数来初始化其基类。我对我的项目的整个想法是,一个人应该尽可能少地创建一个新的派生类,所以我正在尝试做这样的事情:
AddInstance<Specialization>();
//In AddInstance:
{
A* instance = new A(this);
m_Instances.emplace_back(static_cast<Specialization*>(instance));
}
所以假设我应该能够用 A 的构造函数构造一个新类,然后将其转换为所需的专业化。虽然当我实际这样做时,我只是执行 A 的方法而不是专业化的覆盖
解决方案
推荐阅读
- c# - 有没有一种解决方案可以在 IIS 服务器上部署 .net 核心应用程序而无需每次都发布?
- python - 如何绘制两个变量的最佳拟合线,其中 x 轴上的变量是分类变量 (str) 而不是 Python 中的数字?
- python - 使用 QThreadpool 进行多线程时,如何使用 QPainter 在 Qlabel 上绘图?
- gstreamer - gstreamer 保存的文件没有音频
- java - JVM老一代不断增加,而伊甸园和幸存者是不变的
- php - 如何在 php 中回显 json 数据?
- javascript - 现场通知/数据的实时实现
- c# - SimpleAudioPlayer CurrentPosition 和 Duration 始终为 0
- python - 在 skimage python 中使用测地线膨胀进行图像重建的问题
- javascript - 有什么理由(如果有的话)将未使用的参数保留在函数中?这些参数甚至没有使用吗?