【发布时间】:2020-10-10 17:25:29
【问题描述】:
我的意思是有一个依赖于size_t 模板参数的模板函数。
我有一个“后备”定义,放在我的sfinae.h。
template <size_t dim>
int sumVec(void) {
return -1;
}
我已经对dim 的特定值进行了一些专门化,例如在我的sfinae.cc,
template <>
int sumVec<2>(void) {
return 2;
};
及其原型在sfinae.h。
现在我想定义一个适用于dim 的多个值的特化,所以我的意思是避免多次复制它。
我可以将dim 变成enum class,就像在One template specialization for several enum values 中所做的那样
我的问题是 我能否在不(大量)更改我拥有的代码(但我可以添加代码)的情况下实现我的目标?
我尝试在标头或源代码中添加代码,编译器(gcc 10.2.0)抛出错误non-class, non-variable partial specialization 'sumVec<std::enable_if<((dim == 3) || (dim == 4)), void> >' is not allowed
所以我不确定我没有使用正确的方法或语法,或者我的要求是编译器不允许的。
template<size_t dim>
int sumVec<std::enable_if<dim == 3 || dim == 4>>(void)
{
return dim;
};
【问题讨论】:
-
您可能只有一个类并在其实现中使用
if constexpr,这取决于您要实际实现的目标 -
不改变 sfinae.h.
-
@AlanBirtles - 到目前为止我没有任何课程。我欢迎您发布一个简短的示例来说明您的想法。至于我要做什么,解释起来会很长,我不确定它会改变问题......我想这不应该被视为XY Problem,我目前对发布的MCVE感兴趣......如果不够清楚,请告诉我。
-
@bipll - 查看更新的 OP...我的意思是不要大幅更改它。
标签: c++ templates template-specialization