【发布时间】:2016-04-17 04:21:11
【问题描述】:
我想阻止某些函数被调用。让我们忽略通过函数指针或其他东西调用函数的情况,只关注直接函数调用的情况。我可以用= delete 做到这一点。但是,发出的诊断信息并不十分丰富。我考虑使用static_assert,您可以使用它提供自定义诊断消息。我在函数体内放置了一个static_assert(false, ...) 语句,希望它在函数被调用时触发。然而,事实证明,即使没有调用该函数,static_assert 也会失败。有什么建议吗?
补充说明:该功能被无条件禁止。因此,std::enable_if 不适用于此处。这样一个函数的动机是我想阻止某些使用,否则它可以通过重载解析很好地编译。所以我不能只删除该功能。 deprecated 不是我想要的。我想要编译错误,而不是警告。
【问题讨论】:
-
使用
= delete。这就是它的用途。 -
static_assert不能真正阻止函数被调用,它的目的是编译时断言会产生错误。你可能想看看例如std::enable_if代替。 -
为什么函数存在,但它不应该被调用?只需将其从您的代码库中删除即可。
-
我越重读你的问题,我就越困惑,你说的“防止某些函数被调用”是什么意思?您是否希望该功能根本不存在(这就是 using
= delete所做的,实际上删除它也是如此)?您想根据某些特定条件获得编译时错误吗?如果使用某些特定参数调用,或者仅从某些地方调用,您是否希望得到编译器错误?您想根据某些运行时条件阻止某人调用该函数吗? -
@JoachimPileborg
std::enable_if不适用于此处。该功能被无条件禁止。如果我只是删除该函数,重载决议将选择另一个我不想要的函数。
标签: c++ c++11 compile-time static-assert deleted-functions