使用另一个类的模板参数实例化模板类

时间:2015-10-12 13:41:01

标签: c++ templates

有没有办法用另一个类的模板参数实例化模板类(示例中为“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'  

2 个答案:

答案 0 :(得分:6)

是。您的问题是V是类型参数,而sizesize_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