本文主要是介绍代替制版从类模板的成员函数!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当编译器去实例化存储<双>::print(),它会看到我们已经定义的一个,它将使用一个我们定义出一个版本代替制版从类模板的成员函数。该模板告诉编译器,这是一个完整的模板专业化(我们明确指定所有的模板类型)。一些编译器可能会允许你省略这个,但它是适当的,包括它。
因此,当我们重新运行上面的程序,它将打印:
五
6.700000e + 000
现在让我们来看看另一个例子,模板专业化可以是有用的。想象一下如果我们尝试使用我们的模板存储类数据类型char *:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{using namespace std;// Dynamically allocate a temporary stringchar *strString = new char[40];// Ask user for their namecout << "Enter your name: ";cin >> strString;// Store the nameStorage<char*> strValue(strString);// Delete the temporary stringdelete[] strString;// Print out our valuestrValue.Print(); // This will print garbage
}
换句话说,这只是一个指针赋值!作为一个结果,m_tvalue最终指向相同的内存位置strstring。当我们删除strstring在main(),我们最终删除的值,m_tvalue指着!因此,当试图打印该值时,我们得到了垃圾。
幸运的是,我们可以使用模板专业化来解决这个问题。而不是做一个指针复制,我们真的很喜欢我们的构造函数,使一个输入字符串的副本。所以,让我们写一个专门的构造函数的数据类型char *,不完全是那样:
这篇关于代替制版从类模板的成员函数!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!