有没有办法用另一个类的模板参数实例化模板类(示例中为“A”)?
示例:
类“A”:
//A.h
template <size_t size>
class A
{
void doSmt()
{
// do something with size
}
};
班级“B”:
//B.h
#include "A.h"
template<typename V>
class B
{
void doSmt2(A<V> a) //Error Here
{
//do something with a
}
};
我得到的错误: 错误1
error C2993: 'V' : illegal type for non-type template parameter 'size'
答案 0 :(得分:6)
是。您的问题是V
是类型参数,而size
是size_t
参数。只是让它们匹配。
template <std::size_t V>
class B
{
void doSmt2(A<V> a)
{
}
};
答案 1 :(得分:3)
A的模板类型是非类型模板参数。在<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Déclaration des éléments -->
<xsd:element name="msgDateTimeStamp" type="xsd:dateTime" />
<xsd:element name="direction" type="xsd:string" />
<xsd:element name="senderCode" type="xsd:string" />
<xsd:element name="receiverCode" type="xsd:string" />
<xsd:element name="formatCode" type="xsd:string" />
<xsd:element name="typeCode" type="xsd:string" />
<xsd:element name="subTypeCode" type="xsd:string" />
<xsd:element name="communicationMethod" type="xsd:string" />
<xsd:element name="statusID" type="xsd:string" />
<xsd:element name="acknowledged" type="xsd:string" />
<xsd:element name="division" type="xsd:string" />
<xsd:element name="documentID" type="xsd:string" />
<xsd:element name="metaDataName" type="xsd:string" />
<xsd:element name="metaDataType" type="xsd:string" />
<xsd:element name="metaDataValue" type="xsd:string" />
<xsd:element name="correlation" type="xsd:string" />
<xsd:element name="msgBLOB" substitutionGroup="MsgOrValue">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="mimeType" type="xsd:string" />
<xsd:attribute name="msgType" type="xsd:NMTOKEN" />
<xsd:attribute name="storeMethod" type="xsd:NMTOKEN" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="MsgOrValue" abstract="true"/>
<xsd:element name="MetaDataEntry">
<xsd:complexType>
<xsd:all>
<xsd:element ref="metaDataName" />
<xsd:element ref="MsgOrValue" minOccurs="0" maxOccurs="1" />
<xsd:element ref="metaDataType" minOccurs="0" maxOccurs="1" />
<xsd:element ref="correlation" minOccurs="0" maxOccurs="1" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="MetaDataEntries">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="MetaDataEntry" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="MonitoringEntry">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="msgDateTimeStamp" />
<xsd:element ref="direction" />
<xsd:element ref="senderCode" />
<xsd:element ref="receiverCode" />
<xsd:element ref="formatCode" />
<xsd:element ref="typeCode" />
<xsd:element ref="subTypeCode" />
<xsd:element ref="communicationMethod" />
<xsd:element ref="statusID" />
<xsd:element ref="acknowledged" />
<xsd:element ref="division" />
<xsd:element ref="documentID" />
<xsd:element ref="MetaDataEntries" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="MonitoringEntries">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="MonitoringEntry" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
中,我们有一个类型模板参数。这些不兼容。您需要做的是将非类型模板参数类型添加到B
B