【发布时间】:2019-03-11 00:47:28
【问题描述】:
这是我有的东西:
template <typename T, std::size_t dim>
struct vector;
template <std::size_t dim>
struct vector<float, dim>
{
// I want this implementation for dim <= 4
}
template <std::size_t dim>
struct vector<float, dim>
{
// I want this implementation for dim > 4
}
int main() {
vector<float, 3> v1; // should instantiate first one
vector<float, 7> v2; // should instantiate second one
}
现在,这当然不是一个有效的例子,因为我无法让它工作。我不知道如何安排专业化模板签名。它们现在是相同的模板参数,不会编译。不知何故,我猜应该有一种 SFINAE 进入图片,但我不允许在部分专业化上使用默认模板参数。
我可以使用constexpr if 来处理代码选择并改为使用一种专业化。但我相信,对这些进行单独的专业化会使事情更具可读性和可管理性。
您将如何实现这一目标?
【问题讨论】: