Когда я пишу объектно-ориентированный код на C, я обычно помещаю определение структуры вместе с общедоступными функциями в заголовочный файл и реализую общедоступные функции в отдельном файле .c. Я присваиваю ключевое слово static всем функциям, которые являются «частными» для этого класса, а также реализую их в файле .c. Публичные функции могут затем вызывать частные функции, принадлежащие тому же классу. Приватные функции не могут быть вызваны извне благодаря ключевому слову static, поэтому GCC может оптимизировать многие из этих функций. Они часто встраиваются, а исходная функция полностью удаляется из выходного объектного файла.
Теперь мой вопрос: как я могу сделать то же самое с классами C++?
Предположим, у меня есть файл заголовка:
Код: Выделить всё
class A {
int private_field;
int private_function();
public:
int public_function();
};
И мой файл .cpp:
Код: Выделить всё
#include
#include "A.h"
int A::private_function() {
std::cin >> private_field;
return private_field;
}
int A::public_function() {
return private_function() + 4;
}
В результирующем объектном файле функция Private_function остается отдельным символом, а public_function вызывает частную_функцию (не встроенную).
Я хотел бы дать внутреннюю связь Private_function , поэтому компилятор может выполнять ту же оптимизацию, что и при использовании C.
Я пробовал использовать анонимные пространства имен и статику, но не могу заставить это работать так, как хотелось бы.
Как это сделать это правильно, не так ли даже возможно? Я использую GCC.
Подробнее здесь:
https://stackoverflow.com/questions/140 ... -functions