将状态传递给功能指针

Passing state to function pointer

本文关键字:功能 指针 状态      更新时间:2023-10-16

我在具有此类型的外部库中使用的函数:

int libraryFunction(int* fp(int))

但是,我需要回调也可以通过ostream,并且库函数没有任何允许函数,lambdas或通过额外参数的过载。有没有办法将ostream进入回调?

如果库API不支持函数对象或传递自定义状态指针,则您必须将对象的状态(在这里a a ostream(存储在您的身边。

功能是无国状的,除了在已知的时间位置存储状态或状态指针外,别无选择。

陷阱是您必须确保状态的寿命与库中回调的寿命匹配。ostream不得早日销毁。

另一个问题是,除非您可以将某种索引传递给您的功能,否则您必须为每个状态声明一个单独的功能。

传递int,并使用它查找回调所需的所有内容。如果仅是一个排气...

#include <iostream>
#include <functional>
#include <fstream>
#include <map>
int main() {
    enum {
         jkout = 0,
         cout = 1
    };
    std::map<int, std::ostream*> lookup;
    std::ofstream jout("junk.txt");
    lookup[jkout] = &jout;
    lookup[cout] = &std::cout;
    *(lookup[jkout]) << "hellon";
    return 0;
}