模板类C ++中两种不同类型的方法

时间:2018-03-29 21:12:13

标签: c++ oop templates

我想做某种专业化,如下所示:

template <typename Type, int Size>
class Example
{
//some values
public:
double length() const;
}

template <typename Type, int Size>
double Example<double, Size>::length() const {...}

template <typename Type, int Size>
double Example<MyType, Size>::length() const {...}

显然它不起作用。我该如何实现这种方法?我想要显式声明Type,并且要在这里变量Size。

1 个答案:

答案 0 :(得分:0)

一种选择是专门针对doubleMyType

的类模板
template <typename Type, int Size>
class Example
{
  public:
    double length() const { /* Use a generic implementation */ }
}

// Specialize for double
template <int Size>
class Example<double, Size>
{
  public:
    double length() const { /* Use a double specific implementation */ }
}

// Specialize for MyType
template <int Size>
class Example<MyType, Size>
{
  public:
    double length() const { /* Use a MyType specific implementation */ }
}

另一种选择是使用另一个模板类/函数,可以由Example::length()的通用实现使用。

template <typename Type, int Size>
struct Length
{
   // Generic implementation
   static double get() { ... }
}

// Specialize Length for double and MyType

template <int Size>
struct Length<double, Size>
{
   static double get() { ... }
}
template <int Size>
struct Length<MyType, Size>
{
   static double get() { ... }
}

template <typename Type, int Size>
class Example
{
  public:
    double length() const { return Length<Type, Size>::get(); }
}

如果Example中的所有其他内容都可以使用通用代码实现length成员函数,则第二种方法会更好。