我可以为模板类的模板类型添加参数吗?

Can I Add Parameter for Template Type of Template Class

本文关键字:参数 添加 我可以 类型      更新时间:2023-10-16

现在我有一个模板类作为基类,声明如下

template<class TKey, class TValue>
class BaseKeyValueData
{ ... }

我还声明了一个元素类,旨在替换上述基类中的 TKey 和 TValue

class BasicElement
{
    BasicElement() = default;
    BasicElement (const std::string& input) { ... }
}

然后我想从 BaseKeyValueData 创建一个派生类,并将 TKey 替换为 BasicElement,但仍将 TValue 保留为派生类的模板参数。声明如下

template <class T>
class DeriveValueClass() : BaseKeyValueData<BasicElement, T>
{
    DeriveValueClass() : BaseKeyValueData<BasicElement, T>() {}
    ...
}

上面我实现的代码并且它可以工作。但是根据新的要求,我想使用字符串参数来初始化 BasicElement 实例。在上面的DeriveValueClass类中,它的默认构造函数使用BasicElement的默认构造函数(不带参数(。那么我如何使用参数在衍生值类构造函数中初始化基本元素。虚拟代码如下:

DeriveValueClass() : BaseKeyValueData<BasicElement(<parameterForBasicElement>), T>() {}

上面的代码在C++是非法的。我该如何实现?

提前感谢!

对于这个问题,它确实混淆了类型声明和实例初始化。对于 DeriveValueClass 声明,它只声明类型,而不与其构造函数相关。因此,如果要创建类型实例,它应该显式调用类型的构造函数。在我的 cpp 代码中,我有显式创建类型实例,例如:

boost::make_shared<TKey>()

这是考虑使用不同的构造函数来初始化实例的正确位置。