我有一个模板功能:
template<class Route, bool enabled=true>
void addRoute() {
std::cout << "Route added";
}
我想在enabled=false
时禁用该功能。我知道除非使用宏,否则无法禁用从参数调用函数。但是,由于此函数将在程序的生命周期内调用一次,因此如果enabled被设置为false,我不介意调用空函数。所以,我尝试了第一个想到的事情:
template<class Route>
void addRoute<false>() { }
这失败了,所以我做了一些挖掘,发现部分模板专业化是不可能的;我可以使用参数创建一个部分专用的类并执行相同的操作。
有没有其他方法可以解决这个问题,还是应该坚持创建一个具有静态功能的类?
答案 0 :(得分:2)
如果明确指定第二个参数,您想如何“禁用”该功能?默认情况下它是true
并且没有推断,所以调用此函数的唯一方法是通过
addRoute<RouteType, false>();
在这种情况下,“禁用”只能意味着它会产生错误,对吗?如果你想要,只需添加
static_assert( enabled, "Not enabled!" );
以函数的主体作为第一行。或者如果你想“跳过”里面的代码,你可以简单地添加
if( !enabled ) return;
作为第一行。优化器将确保不会生成多余的代码。