我想在编译时检查是否有某些函数某堂课使用/未使用,相应地使编译过程失败/通过。
例如如果函数F1
在代码中的某处调用我希望编译成功,并且 if 函数F2
称为我希望它失败。
关于如何使用预处理器、模板或任何其他 C++ 元编程技术来做到这一点,有什么想法吗?
如果您愿意修改 F2 以在函数体中包含 static_assert 并向签名添加虚拟模板,则可以使用 c++11 编译器来实现此目的:
#include <type_traits>
void F1(int) {
}
template <typename T = float>
void F2(int) {
static_assert(std::is_integral<T>::value, "Don't call F2!");
}
int main() {
F1(1);
F2(2); // Remove this call to compile
}
如果F2没有呼叫者,代码将编译 http://coliru.stacked-crooked.com/a/6dece4b21df18a95. See 这个答案 https://stackoverflow.com/a/5246686/425495为什么我们需要模板技巧并且不能简单地插入static_assert(false, "");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)