簡體   English   中英

指向同時接受const和非const參數的函數的指針

[英]Pointer to a function that accepts both const and non-const arguments

我想為讀取和寫入unix函數編寫包裝,但是read具有const void指針參數,並編寫一個簡單的void指針作為參數。

因此,像這樣的原型將無法使用以下功能之一:

typedef ssize_t (*genericStreamHandler)(int, const void*, size);

如果代碼需要允許不兼容的函數,請不要對函數簽名進行原型設計。

下面的編譯沒有警告/錯誤。

#include <stdio.h>

ssize_t file_read(int h, const void* b, int sz) {
  if (b) return 0;
  return h + sz;
}

ssize_t file_write(int h, void* b, int sz) {
  if (b) return 0;
  return h + sz;
}

//typedef ssize_t (*genericStreamHandler)(int, void*, int);
//                                      v--- No function prototype
typedef ssize_t (*genericStreamHandler)();

int main(void) {
  genericStreamHandler gFH1 = file_read;
  genericStreamHandler gFH2 = file_write;
  char buf[10];
  return (*gFH1)(0, buf, 10) + (*gFH2)(0, buf, 10);
}

OTOH,更好的答案可能在於采用另一種方法,該方法不需要通用類型的變體功能簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM