не может понять использование оператора разрешения области видимости
::mediapipe::Status RunMPPGraph() {
std::string calculator_graph_config_contents;
MP_RETURN_IF_ERROR(mediapipe::file::GetContents(
FLAGS_calculator_graph_config_file, &calculator_graph_config_contents));
LOG(INFO) << "Get calculator graph config contents: "
<< calculator_graph_config_contents;
mediapipe::CalculatorGraphConfig config =
mediapipe::ParseTextProtoOrDie<mediapipe::CalculatorGraphConfig>(
calculator_graph_config_contents);
Это небольшой раздел более крупного кода, предлагаемого Google Mediapipe, который использует оператор разрешения области видимости для определенияRunMPPGraph()
. Я ничего не понимаю в этом определении. Может кто-нибудь сказать мне, что происходит?
Это похоже на функцию, и я уверен, что это так: ::mediapipe::Status RunMPPGraph()
... но основной способ определения функции ---> ReturnType FunctionName(parameters)
, а в этой программе RunMPPGraph
это имя, значит, ::mediapipe::Status
- это возвращаемый тип. В основной функцииRunMPPGraph
() вызывается с этим оператором ---> ::mediapipe::Status run_status = RunMPPGraph();
так это значит ::mediapipe::Status
это некоторая форма определяемого пользователем типа данных. Поэтому я хотел знать, сможем ли мы сломаться::mediapipe::Status
на более мелкие части?
2 ответа
Это довольно просто, я думаю, вы не знакомы с пространствами имен.
::mediapipe::Status RunMPPGraph()
RnuMMPGraph
это функция, принимающая нулевые аргументы и возвращающая ::mediapipe::Status
. Status
это тип, определенный в mediapipe
пространство имен, которое определено в глобальном пространстве имен.
Оператор разрешения в C++ используется по-разному:
1-Доступ к классу внутри другого класса:
class A
{
...
class B
{
static int var;
}
}
int x =A::B::var.
2- Доступ к глобальной переменной, когда есть локальная переменная с тем же именем.
int gval = 5;
{
int gval = 10;
int y = ::gval;//the value assign for y is 5
}
3- ДО доступ к статической переменной внутри класса.
class A
{
static int x;
};
int y = A::x;
4- При использовании от множественного наследования.
class A
{
protected:
int l;
}
class B
{
protected:
int l;
}
class c: class A, class B
{
public:
int f()
{
int c1 = A::l;
int c2 = B::l;
}
}
5- Для пространства имен.
Ваш случай соответствует пункту 2.