无法理解范围解析运算符的使用
unable to understand use of scope resolution operator
::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
是 return 类型。在主函数中,使用此语句调用 RunMPPGraph
() ---> ::mediapipe::Status run_status = RunMPPGraph();
,这意味着 ::mediapipe::Status
是某种形式的用户定义数据类型。所以我想知道我们是否可以将 ::mediapipe::Status
分解成更小的部分?
C++中的解析运算符有不同的使用方式:
1-访问另一个 class 中的 class:
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.
中的静态变量
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项。
说的很直接,估计你对命名空间不熟悉。
::mediapipe::Status RunMPPGraph()
RnuMMPGraph
是一个接受零参数并返回 ::mediapipe::Status
的函数。 Status
是在全局命名空间中定义的 mediapipe
命名空间中定义的类型。
::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
是 return 类型。在主函数中,使用此语句调用 RunMPPGraph
() ---> ::mediapipe::Status run_status = RunMPPGraph();
,这意味着 ::mediapipe::Status
是某种形式的用户定义数据类型。所以我想知道我们是否可以将 ::mediapipe::Status
分解成更小的部分?
C++中的解析运算符有不同的使用方式:
1-访问另一个 class 中的 class:
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.
中的静态变量 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项。
说的很直接,估计你对命名空间不熟悉。
::mediapipe::Status RunMPPGraph()
RnuMMPGraph
是一个接受零参数并返回 ::mediapipe::Status
的函数。 Status
是在全局命名空间中定义的 mediapipe
命名空间中定义的类型。