成员函数的模板专业化

成员函数的模板专业化

本文介绍了成员函数的模板专业化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近在C ++中发现了 template specialization .

I've recently discovered template specialization in C++.

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

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

int main(void) {
  fct<int>();
  return 0;
}

我想对类中的成员函数使用模板专用化.

I'd like to use template specialization for member functions inside a class.

class   MyClass {
  public:
    template <typename T>
    static void fct(void) {}

    template <>
    static void   fct<int>(void) {}
};

int     main(void) {
  MyClass::fct<int>();

  return 0;
}

不幸的是,使用 g ++ 进行编译会给我以下错误:

Unfortunately, compiling with g++ gives me the following error:

error: explicit specialization in non-namespace scope ‘struct MyClass’
error: template-id ‘toto<int>’ in declaration of primary template

我注意到进行模板特化的工作范围是在主作用域或命名空间中,而不是在结构或类中.

I've noticed that doing template specialization works in main scope or in a namespace but not in a struct or in a class.

我在stackoverflow上发现了一些有关使用命名空间的内容,例如以下代码:

I've found something on stackoverflow about using a namespace like in the following code:

namespace myNameSpace {
  template <typename T>
  void fct(void) {}

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

class   MyClass {
  public:
    template <typename T>
    static void fct(void) {
      myNameSpace::fct<T>();
    }
};

int     main(void) {
  MyClass::fct<int>();

  return 0;
}

我做错了什么?是否可以使用成员函数进行模板专业化?如果不是,解决此问题的最佳方法是什么?有没有比使用命名空间更好的方法了?

What am I doing wrong? Is it possible to make template specialization with member functions? If not, what is the best way to get around this? Is there a better way than using namespace to get around this?

推荐答案

在类定义后写专业化名称:

Write the specialization after the class definition:

class MyClass
{
public:
    template <typename T>
    static void fct(void) {}
};

template <>
void MyClass::fct<int>() {}

这篇关于成员函数的模板专业化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 18:40