在 C++ 中将字符串作为函数调用

Calling strings as functions in C++

我正在用本机 C++ 为其他用户编写 'skeleton' 前端,这些用户正在创建我将 'call' 取决于传入的参数的函数。例如:

skeleton.exe /foo param1

将用于在我的骨架中调用函数 "int doFoo(param1){return 0;}"。随着越来越多的团队成员编写函数,我也需要添加这些函数。

我有一个杂念——我什至不确定这是否可能——会有一个资源文件——或者,也许,一个资源 xml 文件——它会列出命令行参数,参数数量,然后是我需要为该参数调用的函数。所以我上面的资源文件看起来像:

foo 1 doFoo

这样,当人们创建他们的函数时,他们所要做的就是将它添加到资源文件中。

我 运行 遇到的问题 - 我想知道它是否可能 - 是我是否可以 'interpret' 那个 'doFoo' 作为一个函数,如果它被读取从资源文件。有什么可以让我 'interpret' 一个字符串作为我可以调用的函数吗?

您将需要映射 字符串到函数指针。

一种方法是创建查找 table 另一种方法是使用 std::map

在互联网上搜索 "c++ dispatch",也许还有 "c++ double dispatch"。

我想我明白了!我只需要确保每个添加的函数都用 extern "C" __declspec(dllexport) 声明!示例:

extern "C" __declspec(dllexport) int square(int x)
{
    return (x*x);
}

typedef int(__cdecl *MYPROC)(int);

int _tmain(int argc, _TCHAR* argv[])
{
    LPCSTR funcName = "square";
    HMODULE hMod = GetModuleHandle(NULL);
    if (hMod != NULL)
    {
        cout << "hMod is not NULL!" << endl;
        MYPROC abstractSquare = (MYPROC)GetProcAddress(hMod, funcName);

        if (NULL != abstractSquare)
        {
            cout << "abstractSquare is not NULL!" << endl;
            int y = (abstractSquare)(10);
            cout << "y = " << y << "!" << endl;
        }
        else
        {
            cout << "abstractSquare is NULL!" << endl;
        }
    }
    else
    {
        cout << "hMod is NULL!" << endl;
    }

    return 0;
}