我想做某种专业化,如下所示:
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。
答案 0 :(得分:0)
一种选择是专门针对double
和MyType
。
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
成员函数,则第二种方法会更好。