【问题标题】: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);
};

如果不能为此目的使用模板,那么这样的声明是否可能?

问候,大卫

【问题讨论】:

  • 为什么你想要这个?

标签: c++ templates visual-c++


【解决方案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)

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2013-03-17
    • 2013-06-19
    • 2012-01-04
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多