【问题标题】:Define template specialization in cpp?在cpp中定义模板专业化?
【发布时间】:2012-10-13 15:24:43
【问题描述】:

我可以像这样在 cpp 中定义一个专门的函数...

// 标题

template<typename T>
void func(T){}

template<>
void func<int>(int);

// cpp

template<>
void func<int>(int)
{}

如何在 cpp 的专用类中定义方法?像这样(这不起作用,我得到error C2910: 'A&lt;int&gt;::func' : cannot be explicitly specialized)......

// 标题

template<typename T>
struct A
{
    static void func(T){}
};

template<>
struct A<int>
{
    static void func(int);
};

// cpp

template<>
void A<int>::func(int)
{}

【问题讨论】:

  • @Pukku 这涉及非模板类中方法的特化,这实际上与独立函数的特化相同(如我上面的工作示例中所示)。我问的是如何在 cpp 的专用 class 中定义一个方法。

标签: c++ visual-studio templates template-specialization


【解决方案1】:

在您的 .cpp 文件中使用以下语法:

void A<int>::func(int)
{
}

这是 Visual C++ 的一种特性。

详情请见MSDN C2910 error description

由于在 Visual Studio .NET 2003 中完成的编译器一致性工作,也会生成此错误:。对于在 Visual Studio .NET 2003 和 Visual Studio .NET 版本的 Visual C++ 中有效的代码,删除模板

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-07-18
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多