我有一个函数列表放在一个表中,用于查找解释器。我将每个函数转换为void(*)(),如下所示:
using vptr = void (*) (); // cast to a function that takes no args, and returns no result
struct function date_funs[] =
{
{C_FN3, X_A3, "III", (vptr) do_hms_to_time, "hms_to_time"},
...
这很有效,并且完全符合我的要求。我想知道是否有另一种表达方式,如:
using vptr = reinterpret_cast<void(*) ()>;
但是,C ++编译器抱怨语法错误。有什么方法可以解决这个问题,还是应该使用我设计的第一种vptr
形式?
答案 0 :(得分:2)
using
(在此上下文中)定义了一个类型别名。在您的尝试中,您没有给出类型,但有一个部分表达式,这是一个语法错误。
缩短用法,例如reinterpret_cast<void(*) ()>(do_hms_to_time)
,你可以介绍一个函数以及使用函数。
using vptr = void (*) ();
template <typename Func>
constexpr vptr to_vptr(Func && func)
{ return reinterpret_cast<vptr>(func); }
并使用它
{C_FN3, X_A3, "III", to_vptr(do_hms_to_time), "hms_to_time"},