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

时间:2015-05-14 23:04:56

标签: c++ string function abstract

我正在为本地C ++编写一个'骨架'前端,供其他用户使用,我将根据传入的参数“调用”这些函数。例如:

skeleton.exe /foo param1

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

一个流浪的想法 - 我甚至不确定这是否可能 - 将有一个资源文件 - 或者,可能是一个资源xml文件 - 将列出命令行参数,数量参数,然后我需要为该参数调用的函数。所以上面的资源文件看起来像是:

foo 1 doFoo

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

我遇到的问题 - 以及我想知道它是否可能 - 是否可以“解释”'doFoo'作为函数从资源文件中读取。是否有任何东西可以让我“解释”一个字符串作为我可以调用的函数?

2 个答案:

答案 0 :(得分:1)

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

一种方法是创建一个查找表,另一种方法是使用std::map

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

答案 1 :(得分:0)

我想我已经拥有了!我只需要确保用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;
}