澄清 类 和此场景中的范围
Clarification on classes and scopes in this scenario
我目前正在使用 JUCE Framework 创建一个音频 VST 插件来掌握和学习,但只想澄清一些与 classes 相关的基本内容。
在我的头文件中,我有一个 class EQPLUGProcessor
并且在那个 class 里面我调用 static juce::AudioProcessorValueTreeState::ParameterLayout createParameterLayout();
当我在 .cpp 中调用函数 createParameterLayout()
时,我必须编写 juce::AudioProcessorValueTreeState::ParameterLayout EQPLUGAudioProcessor::createParameterLayout(){}
我的问题是,为什么我必须在函数所在的实际范围 (EQPLUGAudioProcessor
) 之前包含 juce::AudioProcessorValueTreeState::ParameterLayout
?当然,我应该告诉编译器查看 EQPLUGAudioProcessor
,仅此而已?
我知道 EQPLUGAudioProcessor
是 class,它都在里面,但似乎仍然无法理解何时、何地以及为什么我需要澄清 class该函数来自 again in the .cpp?
如果这需要澄清,请告诉我。
不必指定封闭的命名空间或 class 仅在同一命名空间或 class:
class store {
class give_me {
// ...
};
static give_me something_cool();
};
这里,something_cool
()的声明只需要引用give_me
,而不是store::give_me
。这是因为此声明出现在其 class.
的声明 中
现在这个class已经声明了,是时候定义它的class方法了,所有的东西都必须拼写出来:
store::give_me store::something_cool()
{
// ...
}
如果 class 方法 return 编辑了 void
而不是你仍然必须写这样的东西:
void store::something_cool()
{
// ...
}
您已经明白您不能只编写 void something_cool
() 并定义此 class 方法。这只会用这个名字定义一些不相关的函数。
你必须写 store::something_cool
因为这个定义不再出现在 store
范围内。
嗯,同样的事情不仅适用于 class 方法,也适用于内部 classes(以及在某些封闭范围内声明的其他类型的符号)。由于 give_me
不是在全局范围内声明的 class,它是一个内部 class,当在全局范围内时,您必须将其引用为 store::give_me
.
这就是 C++ 的工作原理。还有各种复杂的规则定义范围的开始和结束位置,关于 C++ 的语法,这与此无关。在某些情况下,可以利用这些范围规则并通过使用带有尾随 return 类型的 auto
声明来避免显式范围引用;但是如何做到这一点将是另一个问题。
我目前正在使用 JUCE Framework 创建一个音频 VST 插件来掌握和学习,但只想澄清一些与 classes 相关的基本内容。
在我的头文件中,我有一个 class EQPLUGProcessor
并且在那个 class 里面我调用 static juce::AudioProcessorValueTreeState::ParameterLayout createParameterLayout();
当我在 .cpp 中调用函数 createParameterLayout()
时,我必须编写 juce::AudioProcessorValueTreeState::ParameterLayout EQPLUGAudioProcessor::createParameterLayout(){}
我的问题是,为什么我必须在函数所在的实际范围 (EQPLUGAudioProcessor
) 之前包含 juce::AudioProcessorValueTreeState::ParameterLayout
?当然,我应该告诉编译器查看 EQPLUGAudioProcessor
,仅此而已?
我知道 EQPLUGAudioProcessor
是 class,它都在里面,但似乎仍然无法理解何时、何地以及为什么我需要澄清 class该函数来自 again in the .cpp?
如果这需要澄清,请告诉我。
不必指定封闭的命名空间或 class 仅在同一命名空间或 class:
class store {
class give_me {
// ...
};
static give_me something_cool();
};
这里,something_cool
()的声明只需要引用give_me
,而不是store::give_me
。这是因为此声明出现在其 class.
现在这个class已经声明了,是时候定义它的class方法了,所有的东西都必须拼写出来:
store::give_me store::something_cool()
{
// ...
}
如果 class 方法 return 编辑了 void
而不是你仍然必须写这样的东西:
void store::something_cool()
{
// ...
}
您已经明白您不能只编写 void something_cool
() 并定义此 class 方法。这只会用这个名字定义一些不相关的函数。
你必须写 store::something_cool
因为这个定义不再出现在 store
范围内。
嗯,同样的事情不仅适用于 class 方法,也适用于内部 classes(以及在某些封闭范围内声明的其他类型的符号)。由于 give_me
不是在全局范围内声明的 class,它是一个内部 class,当在全局范围内时,您必须将其引用为 store::give_me
.
这就是 C++ 的工作原理。还有各种复杂的规则定义范围的开始和结束位置,关于 C++ 的语法,这与此无关。在某些情况下,可以利用这些范围规则并通过使用带有尾随 return 类型的 auto
声明来避免显式范围引用;但是如何做到这一点将是另一个问题。