如何在模板类定义中构造自定义类型
Posted
技术标签:
【中文标题】如何在模板类定义中构造自定义类型【英文标题】:How to construct custom type in a template class definition 【发布时间】:2014-01-13 13:02:36 【问题描述】:是否可以在类型定义中使用模板来构造类型?例如。我想要这样的东西:
class MyType
template<typename T>
someNamespace::T Convert(someOtherNamespace::T value);
;
如果不能为此目的使用模板,那么这样的声明是否可能?
问候,大卫
【问题讨论】:
为什么你想要这个? 【参考方案1】:不,不是。模板参数命名实际类型,而不是标识符(如果您想在命名空间中进行查找,您将需要它)。
另外,我看不出这有什么特别的用处。它要求两个命名空间包含具有相同名称的类型,并且可以以完全通用的方式进行转换 - 您多久会看到一次?
你能更详细地描述你想做什么吗?
【讨论】:
我必须在托管 (c++/cli) 和本机类型之间执行序列化。为此,我有一个模板序列化程序类:template<class managedType, class nativeType> ref class Serializer
。对于大多数类型来说,使用模板很容易,但如果我可以只定义标识符而不是整个类型,那会容易得多,因为在两个命名空间中,类型都具有相同的名称。
@dawid: 你可以使用 MACRO...?
@Jarod42:宏不是在模板之前解析的吗?如果是这样,我必须使用两种类型(从宏获得)实例化模板函数。我想要一个使用一种类型(标识符)模板化的函数,并在函数中执行精确的类型构造(如果类是模板化的,则为类)。
我认为这是一个答案,我想要完成的应该以其他方式实现。谢谢。【参考方案2】:
不太确定你想要什么,但也许跟随(使用宏)可能会有所帮助:
// Assuming value is of type someOtherNamespace::identifier
#define CONVERT(identifier, value) static_cast<someNamespace::identifier>(value)
【讨论】:
以上是关于如何在模板类定义中构造自定义类型的主要内容,如果未能解决你的问题,请参考以下文章
用类模板实现容器存储自定义数据类型(类似于STL里面的vector)
干货C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy