现在我有一个模板类作为基类,声明如下
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 ++中是非法的。我该如何实现呢?
提前致谢!
答案 0 :(得分:0)
对于这个问题,它确实混淆了类型声明和实例初始化。对于DeriveValueClass声明,它只声明类型,与其构造函数无关。因此,如果要创建类型实例,则应显式调用类型的构造函数。在我的cpp代码中,我有显式的创建类型实例,例如:
boost::make_shared<TKey>()
这是考虑使用不同构造函数初始化实例的正确位置。