我可以使用assert吗?强制执行类型定义。假设有一个变量,double d
,您如何使用assert
来断言 d 是一个 double?如果 assert
不适用(我打赌不适用),还有其他选择吗?我特别希望在调试期间测试隐式类型转换,同时受益于 assert
和 #define NDEBUG
的功能。
附言 显然我想将它用于任何类型定义,这里仅以 double 为例。该解决方案应该是跨平台兼容的,并与 C++03 兼容。
我喜欢为我的类 setter 添加错误检查。例如,假设有一个类 MyClass,它有一个私有(private)成员变量 x:
void MyClass::setX(double input)
{
// assert x is double
x = input;
}
最佳答案
这实际上是一个编译时检查,因此您应该为此使用静态断言。
这是一个使用 boost 的静态断言和类型特征的示例。
#include <boost/static_assert.hpp>
#include <boost/type_traits.hpp>
template<typename T>
void some_func() {
BOOST_STATIC_ASSERT( (boost::is_same<double, T>::value) );
}
TEST(type_check) {
some_func<double>();
}
无论如何,我假设您指的是模板。
关于c++ - 您可以使用断言来测试 C++ 中的类型定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559908/