Методы класса внутренней связи - PullRequest
0 голосов
/ 09 ноября 2019

В CI может иметь структуру и некоторые открытые функции, объявленные в заголовочном файле, в то время как некоторые «частные» функции могут быть объявлены как статические в исходном файле. Например:

foo.h

typedef struct Foo {
...
} Foo;
void func1(Foo *foo);

foo.c

#include "foo.h"
static void func2(Foo *foo) {...}
void func1(Foo *foo) {...}

В этом случае func2 внутренне связано. Возможно ли это с помощью методов класса C ++? Если я напишу:

foo.hpp

struct Foo {:
  void func1();
private:
  void func2();
};

func2 все равно будет связан с внешним миром. Есть ли способ сделать его внутренним, сохранив его внутри структуры?

1 Ответ

0 голосов
/ 09 ноября 2019

Вы можете объявить обычные статические функции в C ++, как и в C, в любом модуле перевода. Но они будут обычными статическими функциями, а не методами класса.

Методы класса не ограничены одной единицей перевода. Большой класс нередко сталкивается с множеством методов, разбитых на две или более разных единиц перевода. Частные методы из одного модуля перевода, конечно, могут вызывать другие частные методы в порядке перевода модулей. Следовательно, их связь должна быть внешней.

Это все, что дает вам стандартный C ++. Помимо этого, могут быть специфические для реализации расширения, которые можно использовать, если переносимость не является проблемой. Например, gcc предлагает атрибут видимости . «внутренняя» видимость подразумевает статическую связь. Я не проверял это, но атрибут отмечен как применимый к коду C ++, а не только к C.

...