我想阻止某些函数被调用。让我们忽略通过函数指针或其他东西调用函数的情况,只关注直接函数调用的情况。我可以这样做= delete
。然而,发布的诊断信息并不丰富。我考虑过使用static_assert
,您可以使用它提供自定义诊断消息。我放置了一个static_assert(false, ...)
函数体内的语句,希望在调用函数时触发它。然而,事实证明,static_assert
即使未调用该函数也会失败。有什么建议么?
附加说明:该功能被无条件禁止。所以,std::enable_if
不适用于此处。这样一个函数的动机是我想防止某些使用,否则可以通过重载解析很好地编译。所以我不能只是删除这个功能。deprecated
这不是我想要的。我想要一个编译错误,而不是警告。
我同意其他人的观点,你不应该使用static_assert
为此,请将函数标记为已弃用。
static_assert
离子在编译时就会激发。对于普通函数来说,这是解析它的时间,而不是调用它的时间。为一个template
然而,这是实例化的时间。所以你可以让你的功能template
像这样。
template <typename...>
struct always_false { static constexpr bool value = false; };
template <typename... Ts>
void
never_call_me(Ts&&...)
{
static_assert(always_false<Ts...>::value,
"You should have never called this function!");
}
If typename...
不适合您(因为该函数已重载),请尝试缩小范围以仅匹配您想要出错的内容。
这里使用的技巧是always_false<Ts...>::value
取决于类型参数Ts...
因此无法对其进行评估,直到template
被实例化。 (尽管我们可以清楚地看到它永远是false
.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)