我如何 return 一个函数指针作为 const?

How do I return a function pointer as const?

我创建了一个动态数组 struct Vector,我对用户隐藏了它的内部结构。取而代之的是提供函数与它们进行交互,例如

bool Vector_push(struct Vector *vector, const void *value)

为了帮助弹出元素,该结构包含一个指向正确删除每个元素的函数的指针。这个函数是用函数设置的:

void Vector_set_type_destructor(struct Vector *vector, void (*type_destructor)(void *))

我觉得提供一个setter而没有一个getter有点奇怪,所以我很快添加了以下功能。

const void (*Vector_type_destructor(const struct Vector *vector))(void *);

请注意我是如何添加 const 关键字的,因为我希望类型析构函数只能通过 setter 修改,而不是通过 returned 指针修改。但是,我收到了来自 clang 的以下警告。

src/Vector.c:184:66: warning: function cannot return qualified void type
      'const void' [-Wqualified-void-return-type]
const void (*Vector_type_destructor(const struct Vector *vector))(void *) {
                                                                 ^
src/Vector.c:185:12: warning: incompatible pointer types returning
      'void (*const)(void *)' from a function with result type
      'const void (*)(void *)' [-Wincompatible-pointer-types]
    return vector->type_destructor;

如何通过函数正确 return 指针 void (*type_destructor)(void *) 而不将其暴露给可能的修改?

尝试将 const 放在 * 旁边:

void (*const Vector_type_destructor(const struct Vector *vector))(void *);