gpt4 book ai didi

c++ - 函数定义和函数类型

转载 作者:行者123 更新时间:2023-11-30 00:59:39 30 4
gpt4 key购买 nike

我有以下按预期工作的代码:

#include <iostream>

using namespace std;

typedef int (TMyFunc)(int);

TMyFunc* p;

int x(int y)
{
return y*2;
}

int main()
{
p = &x;
cout << (*p)(5) << endl;
}

我想做的是跳过定义 x 并直接在那里定义 p 。有点像

TMyFunc p; p(y){返回 y*2;}

这可能吗?如果是这样,我该怎么做?如果不是,为什么?

编辑:

看到答案后,我想我应该澄清一下:我希望定义是分开的。即函数定义将在共享对象中。应用程序将通过 dlsym 获取指向函数的函数指针。我想要一个函数对象。我想知道我是否可以使用共享对象和应用程序共同的头文件将提供的类型来定义函数。我希望结果是正确的:)。

EDIT2:对于 sbi :)

这位于应用程序和共享对象中都包含的 header 中:

#define FNAME_GET_FACTORY       "GetFactory"
#define FNAME_GET_FUNCTION_IDS "GetFunctionIDs"
#define FNAME_GET_PLUGIN_INFO "GetPluginInfo"

typedef FunctionFactory* (*TpfGetFactory)();
typedef size_t (*TpfGetFunctionIDs)(int**);
typedef PluginInfo* (*TpfGetPluginInfo)();

在应用程序中,会发生这样的事情:

TpfGetFactory pF = (TpfGetFactory)dlsym(pHandle, FNAME_GET_FACTORY);
//Use pF for anything

现在,为此,我必须在共享对象中按如下方式定义 GetFactory:

extern "C" FunctionFactory* FNAME_GET_FACTORY(){//CODE}

暂时忘记 extern "C" 部分,我可以使用已经定义的类型 TpfGetFactory 来定义这个函数吗? (这不是我知道的大问题 - 但我很好奇这是否可能 :) )。我想要的是共享对象中的类似内容:

TpfGetFactory f;
f(){//Implementation}

编辑3:

我的尝试:

#include <iostream>

using namespace std;

typedef int (TF)(int);

TF f;

f(int x)
{
return x*2;
}

int main()
{
x(3);
}

main.cpp:9: error: ISO C++ forbids declaration of ‘f’ with no type
main.cpp: In function ‘int main()’:
main.cpp:16: error: ‘x’ was not declared in this scope

最佳答案

在下一个 C++ 标准 C++1x 中是可能的,通常预计明年(届时将成为 C++11)。它允许这样做:

auto p = [](int y){return y*2;};

这依赖于 auto 被赋予了新的含义(“自动从初始化它的表达式中推断出该变量的类型”)和新的 lambda 函数(允许动态创建函数) .

您的编译器实际上可能已经支持这一点。

关于c++ - 函数定义和函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4022984/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com