Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 本地类作为模板参数-实例化点_C++_Templates_Generics_Instantiation - Fatal编程技术网

C++ 本地类作为模板参数-实例化点

C++ 本地类作为模板参数-实例化点,c++,templates,generics,instantiation,C++,Templates,Generics,Instantiation,我正试图从TC++PL第四版(第751页)的例子中总结我的想法 void fff() { 结构S{inta,b;}; 向量vs; // ... } 从讨论中可以看出,vector的实例化点就在void fff()的定义之前。但是,struct S在void fff()外部不可见。用本地类作为模板参数的实例化点的正确方式是什么?在本例中,实例化的意思是模板实例化 编译器在fff之前创建一个vector的vector类定义,以便在以后需要使用S进行另一个实例化时可以重用它。 它不会在该点创建向量的

我正试图从TC++PL第四版(第751页)的例子中总结我的想法

void fff()
{
结构S{inta,b;};
向量vs;
// ...
}

从讨论中可以看出,
vector
的实例化点就在
void fff()
的定义之前。但是,
struct S
void fff()外部不可见。用本地类作为模板参数的实例化点的正确方式是什么?

在本例中,实例化的意思是模板实例化

编译器在fff之前创建一个vector的vector类定义,以便在以后需要使用S进行另一个实例化时可以重用它。 它不会在该点创建向量的实例

是的,我们不能从fff外部访问,但编译器知道它并创建一个全局模板,以便可以重用


谢谢!我想我可以重新表述我的问题。在包含其用法的声明之前实例化模板类的语句只是一个启发式语句,仅适用于模板定义中使用的名称,而不适用于模板参数,这是正确的吗?也就是说,它只涉及从属和独立名称的绑定,但不是对模板参数,我不知道这是否在标准中,模板在其类型完整且全局时被实例化。在这种情况下,编译器构建者可以做任何最适合他们的事情
void fff()
{
    struct S { int a,b; };
    vector<S> vs;
    // ...
}