了解Loki库中的STATIC_CHECK
understanding STATIC_CHECK in Loki library
template<int> struct CompileTimeError;
template<> struct CompileTimeError<true> {};
#define STATIC_CHECK(expr,msg) {CompileTimeError< ((expr)!=0) > Error_##msg; (void)Error_##msg; }
template <class To , class From>
To safe_reinterpret_cast(From from)
{
STATIC_CHECK(sizeof(From) <= sizeof(To),Destination_Type_Too_Narrow);
return reinterpret_cast<To>(from);
}
void main()
{
void *p= NULL;
char c= safe_reinterpret_cast<char>(p);
}
上面的代码工作得很好,当我们试图将指针转换为char时,会给出编译时错误。但是目前还不清楚STATIC_CHECK宏是如何工作的。
根据上面的代码,它应该导致以下
STATC_CHECK(false,Destination_Type_Too_Narrow)
以上宏将被展开如下:
CompileTimeError<false>
ERROR_Destination_Type_Too_Narrow;
(void)ERROR_Destination_Type_Too_Narrow;
在上面的宏中,我不明白这两个语句对于
是什么意思。 ERROR_Destination_Type_Too_Narrow;
(void)ERROR_Destination_Type_Too_Narrow;
如果有人有清楚的理解,请解释
我们对类CompileTimeError<true>
进行了专门化,它有默认构造函数。其他情况的实例化将导致错误,即CompileTimeError<not true>
是未定义类型(在您的情况下,我们试图创建类型为CompileTimeError<false>
的变量ERROR_Destination_Type_Too_Narrow
)。(void)VariableName
只沉默-Wunused
相关文章:
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- CHECK(调用)函数在Google Colab中出错
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 收到错误"invalid use of non-static data member 'stu::n' "
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 'make check' GLIBC 运行时的链接问题
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- "static char __ = []() -> char"的含义
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 无法在 DLL 中链接 SDL2-static.lib
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- C++线程"Call to non-static member function without an object argument"
- 出现这种错误的原因是什么"invalid use of non-static data member "
- static是如何使用ClassA::m_variable处理所有类对象的
- LNK2001:未解析的外部符号public:static类std::vector
- 使用-static libstdc++时std::线程弱,因此在运行时会导致崩溃
- 你能初始化unique_ptrs "static const vectors"吗?(C++17 与 GCC 7.3)