Как получить доступ к функции в другом файле?
Зависит от типа функции, возможны случаи:
1. Доступ к функциям-членам класса в другом файле (модуль перевода):
Очевидно, что вам нужно включить заголовочный файл с объявлением класса в вашей единице перевода вызывающей стороны.
Пример кода:
//MyClass.h
class MyClass
{
//Note that access specifier
public:
void doSomething()
{
//Do something meaningful here
}
};
#include"MyClass.h" //Include the header here
//Your another cpp file
int main()
{
MyClass obj;
obj.doSomething();
return 0;
}
2. Доступ к бесплатным функциям в другом файле (блок перевода):
Вам не нужно включать функцию в любой класс, просто включите заголовочный файл, который объявляет функцию, а затем используйте ее в своем модуле перевода.
Пример кода:
//YourInclude.h
inline void doSomething() //See why inline in @Ben Voight's comments
{
//Something that is interesting hopefully
}
//Your another file
#include"YourInclude.h"
int main()
{
doSomething()
return 0;
}
Другой случай, на который @Ben указал в комментариях, может быть:
Объявление в заголовочном файле с последующим определением в одной единице перевода
Пример кода:
//Yourinclude File
void doSomething(); //declares the function
//Your another file
include"Yourinclude"
void doSomething() //Defines the function
{
//Something interesting
}
int main()
{
doSomething();
return 0;
}
С другой стороны, грязный способ сделать это может состоять в том, чтобы просто пометить функцию как extern в вашем другом файле и использовать функцию. Не рекомендуется, но возможна следующая возможность:
Пример кода:
extern void doSomething();
int main()
{
doSomething();
return 0;
}
Как бы вы занялись созданием функции, которая получает функцию в качестве параметра?
Используя function pointers
В двух словах, указатели на функции - это не что иное, как указатели, которые содержат адрес функций.
Пример кода:
int someFunction(int i)
{
//some functionality
}
int (*myfunc)(int) = &someFunction;
void doSomething(myfunc *ptr)
{
(*ptr)(10); //Calls the pointed function
}