如何在 class 模板中专门化模板方法?
How to specialize templated method within class template?
我正在尝试做一些 Resolution 结构,它只保存屏幕的 width_ 和 height_ 。
我会在某些方面大量使用它,有些方法需要像数据这样的向量,有些方法需要类似内部结构的数据。
Example:
template<typename InternalType>
struct Resolution
{
InternalType width_;
InternalType height_;
std::vector<InternalType> vectorRepr()
{
return std::vector<InternalType>{width_, height_};
};
Vector2 vectorRepr()
{
return Vector2{width_, height_};
};
// maybe some other overloadings of vectorRepr()
}
以上示例无效,因为 vectorRepr 严重超载。
我想要实现的是在 Resolution 结构中封装方法 return 我在不同数据类型中的内部状态。模板专业化可能会派上用场,但我很难加入 Resolution 模板和 vectorRepr 模板的想法。
对我来说,它看起来类似于部分模板特化。
关闭 std::vector return 输入:
template<> // <- this is a specialization for vectorRepr
std::vector<InternalType> vectorRepr<std::vector>()
{
// but here, vector should know the InternalType, to embed it.
// so the InternalType is not specialized.
return std::vector<InternalType>{width_, height_};
}
在这里我发现了一个有趣的例子(但它缺少 return 的成员属性):
How to specialize template function with template types
我知道可以通过不同的方式轻松完成,但此时我只是好奇。
是否可以实现?
游乐场:
在所示示例中,我认为不需要任何专业化,无论是部分专业化还是其他方面。这足够了:
template <typename Ret>
Ret vectorRepr() {
return {width_, height_};
}
我正在尝试做一些 Resolution 结构,它只保存屏幕的 width_ 和 height_ 。 我会在某些方面大量使用它,有些方法需要像数据这样的向量,有些方法需要类似内部结构的数据。
Example:
template<typename InternalType>
struct Resolution
{
InternalType width_;
InternalType height_;
std::vector<InternalType> vectorRepr()
{
return std::vector<InternalType>{width_, height_};
};
Vector2 vectorRepr()
{
return Vector2{width_, height_};
};
// maybe some other overloadings of vectorRepr()
}
以上示例无效,因为 vectorRepr 严重超载。
我想要实现的是在 Resolution 结构中封装方法 return 我在不同数据类型中的内部状态。模板专业化可能会派上用场,但我很难加入 Resolution 模板和 vectorRepr 模板的想法。
对我来说,它看起来类似于部分模板特化。
关闭 std::vector return 输入:
template<> // <- this is a specialization for vectorRepr
std::vector<InternalType> vectorRepr<std::vector>()
{
// but here, vector should know the InternalType, to embed it.
// so the InternalType is not specialized.
return std::vector<InternalType>{width_, height_};
}
在这里我发现了一个有趣的例子(但它缺少 return 的成员属性): How to specialize template function with template types
我知道可以通过不同的方式轻松完成,但此时我只是好奇。
是否可以实现?
游乐场:
在所示示例中,我认为不需要任何专业化,无论是部分专业化还是其他方面。这足够了:
template <typename Ret>
Ret vectorRepr() {
return {width_, height_};
}