如何在 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

我知道可以通过不同的方式轻松完成,但此时我只是好奇。

是否可以实现?

游乐场:

https://godbolt.org/z/bE49vv3Ms

在所示示例中,我认为不需要任何专业化,无论是部分专业化还是其他方面。这足够了:

template <typename Ret>
Ret vectorRepr() {
  return {width_, height_};
}

Demo