Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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++入门,并且有一些问题了解隐含实例化是如何工作的。我还没有学过课程,所以我只是在处理函数。我想我理解隐式实例化(函数模板)的基础知识,但我不理解显式实例化。下面我有一个使用模板的函数,有人能告诉我,如果这样的函数使用显式实例化,它将如何编写吗。你可以改变它的工作方式,但要保持简单。我真的很感激。这将帮助我理解语法,以及如何使用它 2 #include <iostream> 3 4 template <typename T> 5 void show(T,T); 6 7 8 int main() 9 { 10 int a = 10, b = 12; 11 char c = 'x', d = 'y'; 12 13 show(a,b); 14 show(c,d); 15 16 return 0; 17 } 18 19 template <typename T> 20 void show(T a, T b ) 21 { 22 std::cout << "I used the int version " << a << " " << b << "\n"; 23 } 2#包括 3. 4模板 5无效显示(T,T); 6. 7. 8 int main() 9 { 10 int a=10,b=12; 11字符c='x',d='y'; 12 13场演出(a、b); 14场(c、d); 15 16返回0; 17 } 18 19模板 20无效显示(T a、T b) 21 { 22 std::cout_C++_Instantiation - Fatal编程技术网

c++;显式实例化——函数模板——替换隐式实例化来学习它 我读C++入门,并且有一些问题了解隐含实例化是如何工作的。我还没有学过课程,所以我只是在处理函数。我想我理解隐式实例化(函数模板)的基础知识,但我不理解显式实例化。下面我有一个使用模板的函数,有人能告诉我,如果这样的函数使用显式实例化,它将如何编写吗。你可以改变它的工作方式,但要保持简单。我真的很感激。这将帮助我理解语法,以及如何使用它 2 #include <iostream> 3 4 template <typename T> 5 void show(T,T); 6 7 8 int main() 9 { 10 int a = 10, b = 12; 11 char c = 'x', d = 'y'; 12 13 show(a,b); 14 show(c,d); 15 16 return 0; 17 } 18 19 template <typename T> 20 void show(T a, T b ) 21 { 22 std::cout << "I used the int version " << a << " " << b << "\n"; 23 } 2#包括 3. 4模板 5无效显示(T,T); 6. 7. 8 int main() 9 { 10 int a=10,b=12; 11字符c='x',d='y'; 12 13场演出(a、b); 14场(c、d); 15 16返回0; 17 } 18 19模板 20无效显示(T a、T b) 21 { 22 std::cout

c++;显式实例化——函数模板——替换隐式实例化来学习它 我读C++入门,并且有一些问题了解隐含实例化是如何工作的。我还没有学过课程,所以我只是在处理函数。我想我理解隐式实例化(函数模板)的基础知识,但我不理解显式实例化。下面我有一个使用模板的函数,有人能告诉我,如果这样的函数使用显式实例化,它将如何编写吗。你可以改变它的工作方式,但要保持简单。我真的很感激。这将帮助我理解语法,以及如何使用它 2 #include <iostream> 3 4 template <typename T> 5 void show(T,T); 6 7 8 int main() 9 { 10 int a = 10, b = 12; 11 char c = 'x', d = 'y'; 12 13 show(a,b); 14 show(c,d); 15 16 return 0; 17 } 18 19 template <typename T> 20 void show(T a, T b ) 21 { 22 std::cout << "I used the int version " << a << " " << b << "\n"; 23 } 2#包括 3. 4模板 5无效显示(T,T); 6. 7. 8 int main() 9 { 10 int a=10,b=12; 11字符c='x',d='y'; 12 13场演出(a、b); 14场(c、d); 15 16返回0; 17 } 18 19模板 20无效显示(T a、T b) 21 { 22 std::cout,c++,instantiation,C++,Instantiation,将模板视为类似于复制/粘贴的代码生成,在这里,您用具体类型替换T。“实例化”是将代码复制粘贴到程序中的过程 无论何时使用模板,都会发生隐式实例化。对于函数模板,从函数参数推导出具体类型,并为该类型实例化模板。因此,您的代码实际上变成: void show(int a, int) { std::cout << "I used the int version " << a << " " << b << "\n"; } void show

将模板视为类似于复制/粘贴的代码生成,在这里,您用具体类型替换
T
。“实例化”是将代码复制粘贴到程序中的过程

无论何时使用模板,都会发生隐式实例化。对于函数模板,从函数参数推导出具体类型,并为该类型实例化模板。因此,您的代码实际上变成:

void show(int a, int)   { std::cout << "I used the int version " << a << " " << b << "\n"; }
void show(char a, char) { std::cout << "I used the int version " << a << " " << b << "\n"; }

int main() { /* as it was */ }
对于您的代码,编译器将生成相应的代码

void show(double a, double) { std::cout << "I used the int version " << a << " " << b << "\n"; }

void show(double a,double){std::cout如果您指的是
int的专门化(您指的是显式实例化),那么它可以是:

template <typename T>
void show(T,T);

template <>  // specialization (not overloading) for 'int'
void show(int a, int b)
{
   std::cout << "I used the int version " << a << " " << b << "\n";
}
模板
无效显示(T,T);
“int”的模板//专门化(非重载)
无效显示(内部a、内部b)
{

std::cout只需执行一个
Show(c,d)
注意,我已经显式地实例化了
int
版本,但是传递了
char
参数。这是(一个相当简单的假设)显式实例化,但您可能实际引用了。

要显式实例化您的函数,您需要显式指定类型。在您的示例中,将对
show
的调用替换为:

show<int>(a,b);
show<char>(c,d);
show(a,b);
显示(c,d);

就是这样。隐式实例化只是意味着编译器可以从参数的类型中找出
int
char

oops对不起,我一直在搞砸它,我忘了把它放在我的示例中。你知道如何将此函数转换为显式实例化吗?我将我的函数编辑为sho这是不正确的。你说的是模板专业化,而模板函数不存在。你的代码实际上是不正确的。@PierreBdR,唯一的。
template
专业化确实存在于
template
函数。为什么你觉得它不正确。对不起,我被部分专业化搞混了。另外,我“我从未见过函数专门化有用的案例。他不能谈论模板专门化,因为它不存在于函数模板中…@PierreBdR-你是对的,显式专门化是我所寻找的。编辑。我知道存在这样的东西,只是忘了它叫什么…@Schnommus-也不是,它是c调用显式实例化。再一次,函数模板不存在专门化。@PierreBdR-那么为什么会有一篇MSDN文章称为函数模板的显式专门化?是的,只有部分专门化不存在(我得到纠正),但您在这里使用的实际上是实例化。专门化意味着您正在为模板指定不同的代码。
show<int>(a,b);
show<int>(a,b);
show<char>(c,d);