如何在模板类定义中构造自定义类型

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&lt;class managedType, class nativeType&gt; 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

类(对象)的定义 自定义对象构造函数

当自定义模板已应用于节点的内容类型时,如何在 Drupal 6 中自定义特定节点?

如何自定义模板以不包含某些类型[重复]

如何从模板中的自定义帖子类型中仅提取一个类别?