gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:50 26 4
gpt4 key购买 nike

我想做一些特化,像这样:

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 是可变的。

最佳答案

一个选项是为 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 成员函数之外的所有其他内容都可以使用通用代码实现,则第二种方法更好。

关于c++ - 模板类C++中两种不同类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com