我想注册一个返回 int
的函数,使用 atexit()
函数在程序结束时调用它(具体来说是 ncurses 库的 endwin()
函数)。
但由于 atexit()
需要一个指向 void
函数的指针,所以我遇到了问题。我尝试了以下方法:
static_cast<void (*)()>(endwin)
但是从一个 int
函数向一个 void
函数进行 static_cast
似乎是不被允许的。
我想实现的目标是否可能,如果是,如何实现?
注意: 我愿意忽略函数的返回值。
编辑: 我还尝试创建了一个lambda函数,它似乎做到了我想要的:
atexit([]{ endwin(); });
与使用包装器/转发函数相比,这是一种好的解决方案吗?(除了需要C++11并避免定义一个唯一目的是转发另一个函数的新函数之外。)
reinterpret_cast
吗? - Basile Starynkevitchendwin
返回一个复杂数据类型,例如std::string
或struct X
,则它会将数据返回到由某个隐藏参数给定的空间。如果返回的数据类型是“简单”的(例如int
、char
或某些指针),则返回值将传递到寄存器中,这通常是无害的。但Dietmar的解决方案是“每次都有效的解决方案”,[并且编译器可能会对其进行优化,以便在“返回值在寄存器中因此可以被忽略”的情况下几乎没有任何开销] - Mats Petersson