c++ - 您可以使用断言来测试 C++ 中的类型定义吗?

标签 c++ debugging casting assert

我可以使用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/

相关文章:

c++ - 为什么在通过添加字符串文字和 char 进行初始化时不打印字符串

c++ - wxSlider点击鼠标时如何设置步长?

c++ - 如何检查简单的 C++ 标准库迭代器是否可以被推进?

c++ - 编辑控件无法将文本设置为空字符串

c - DDD 运行时(?)错误

javascript - 如何调试谷歌浏览器后台脚本?

Delphi XE7 : Debug points not appearing, 调试时未命中断点并且 CPU 窗口打开

c# - OOC : What is the difference between ToList() and casting to List<T> in . 网络?

c# - 使用 typeof 进行强制转换

scala - 将变量强制转换为 Scala 中的方法 "Runtime Evaluation"