не может понять использование оператора разрешения области видимости

::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.

Другие вопросы по тегам