是否可以声明属于模板类的单个实例化的函数?

Dan*_*atz 7 c++ templates

我想到的应用程序类似于Vector<size>类,我希望在其中声明

CrossProduct(const Vector<size>& other)
Run Code Online (Sandbox Code Playgroud)

仅适用于尺寸为3的情况.我知道有很多方法可以解决它...

  • 仅包含size = 3的函数定义
  • 让所有其他大小产生链接器错误
  • 在方法的开头执行静态断言以检查大小是否为3

有没有办法正确地声明特定实例化的成员函数?

Ed *_*rbu 5

这是一种方法:

template <class Type, size_t Size>
struct EnableCrossProduct
{

};

template <class Type>
struct EnableCrossProduct<Type, 3>
{
  void CrossProduct(const Type & other){}
};

template <size_t Size>
struct Vector : public EnableCrossProduct<Vector<Size>, Size>
{
};
Run Code Online (Sandbox Code Playgroud)

  • 玩得开心重复`// whatever`. (2认同)