У меня есть следующий код, который работает, как ожидалось:определение функции и функции типа
#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){return y*2;}
.
Возможно ли это? Если да, то как мне это сделать? Если не так?
EDIT:
После просмотра ответов, я думаю, что я должен уточнить: Я хочу, чтобы определение отделиться. то есть определение функции будет в общем объекте. Приложение будет получать указатель на функцию через dlsym
. I do нет хочет функция объект. Я хочу знать, могу ли я определить функцию, используя ее тип, который будет содержать заголовочный файл, общий как для общего объекта, так и для приложения. Надеюсь, это получилось правильно :).
EDIT2: Для ВОО :)
Это находится в заголовке, который включен в обоих приложения и общего объекта:
#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}
EDIT3:
Моя попытка:
#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
Вы можете добавить некоторые (псевдо) код, описывающий, как вы хотите его использовать? Ваше добавленное описание смущает меня больше, чем это проясняет. – sbi
Удалено тег C, так как нет iostream или пространства имен std в C. – Puppy