结合'使用'和'reinterpret_cast'

时间:2017-07-10 10:09:57

标签: c++11

我有一个函数列表放在一个表中,用于查找解释器。我将每个函数转换为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形式?

1 个答案:

答案 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"},