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

时间:2017-11-14 01:47:15

标签: c++ templates arguments

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

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构造函数中使用参数初始化BasicElement。虚拟代码如下:

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

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

boost::make_shared<TKey>()

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