我的目标是有一个库提供我的函数的多个实例
increment
,基于唯一的定义以避免代码冗余:
template <bool modify>
int increment(int a, int b) {
if constexpr(modify)
return a+=b;
else
return ++a;
}
正确实例化后,我有两种不同的实现,具体取决于
modify
的值。
问题是,当
modify
为 false 时,函数参数 b
仍然是必需的,但从未使用过。
我想要的:要求编译器提供带有签名的实例:
template int increment<false>(int a)
,无需自己实现(我的函数increment
必须有一个实现)。
理想情况下,在我的库中
.h
我会有类似的东西:
template <bool modify>
int increment(int a, int b);
template int increment<false>(int a);
我知道为
b
分配默认值可能是一种解决方法,但这不是我想要的。
这是一个简化的问题,我希望它能够复制我的实际问题。 我不知道 C++ 标准是否提供了这样的解决方案,或者我是否应该接近元编程扩展,或者转到特定的编译器。
提前谢谢您。
这是一个具有单一实现的函数模板:
template <bool modify, class... Args>
int increment(Args... args) {
return modder<modify>(args...).res;
}
另一方面,modder
是一个有专门化的课程:
template <bool>
struct modder { // the primary template will match the `true` case
modder(int a, int b) : res(a + b) {}
int res;
};
template <>
struct modder<false> { // specialization for the `false` case
modder(int a) : res(a + 1) {}
int res;
}