对于将此标记为重复的人:这并不是重复的问题;其他问题涉及编译时常量
现在调用此函数将改变您生活的所有方面,除非
在函数体中的某个位置有一个C++机制,强制编译失败,提示用户不能为这样的低劣非惊人对象使用此函数。
这可行吗?
要澄清的是,这是基于变量内容进行编译时操作,如上例所示。建议使用
enum
。这不是一个常数整数表达式,因此解决方案会非常不同。在建议已经在其他问题中得到解答之前,请仔细查看我的代码。我正在检查对象上的成员变量的值,这些信息是在运行时创建的,并且我很好奇在这种情况下我能做些什么。
我现在需要使用某些东西,如果我的 API 的用户做了一些不应该做的事情,让编译器失败。
我不知道是否可能,它是吗?我提到的选项主要是运行时选项,对吧?
例如,假设你有一个函数:
void doSomethingIncredible(AwesomeClass amazingObject)
{
//perform life-changing work here except:
if (amazingObject.isntAmazing) //a bool property of object
//uh oh, life sucks, I refuse to compile this
现在调用此函数将改变您生活的所有方面,除非
amazingObject
开启了特定属性的情况下,在这种情况下,我希望编译器甚至不允许通过,即无法运行程序。在函数体中的某个位置有一个C++机制,强制编译失败,提示用户不能为这样的低劣非惊人对象使用此函数。
这可行吗?
要澄清的是,这是基于变量内容进行编译时操作,如上例所示。建议使用
static_assert
在此处不适用。
isntAmazing
是编译时常量吗?如果您在编译时知道某些信息,可以使编译器仅出现错误信息。对于运行时值,您需要运行时断言。更详细地描述AwesomeClass
的类型,以便有人可以帮助您。 - iammilind