请参考下面的代码
Specialized function in non specialized Template class
是否可以编写一个专门的函数foo,对于非专业的模板类MyClass的[行号7]?如果是,那么,相同的语法是什么。
问候,
阿图尔专业功能
Q
专业功能
3
A
回答
2
这可以,如果你创建类模板的完全专门来完成。只是参考答案这样一个问题:If I want to specialise just one method in a template, how do I do it?
否则,如果你想拥有具有相同签名给定函数具有取决于类的实例化版本两种不同的行为,并实例化的偏特模板类,你将不得不做一个模板类的专门化。
请记住,如果您希望在第二种情况下避免冗余代码,您可以始终创建一个基本模板类,该类将具有不会更改的功能,然后创建将包含唯一功能的派生模板类每个部分专业化都需要。
2
看我下面的例子,我本人在可能的最简单的代码,试图回答你的问题(如果我猜得不错):
#include <iostream>
using namespace std;
template<typename T>
class Some
{
public:
template<typename U> void foo(U val);
};
template<typename T>
template<typename U>
void Some<T>::foo(U val)
{
cout << "Non specialized" << endl;
}
template<>
template<>
void Some<char>::foo(char val)
{
cout << "Char specialized" << endl;
}
int main()
{
Some<int> t1;
t1.foo(5);
Some<char> t2;
t2.foo('c');
return 0;
}
重要的事情这里要注意的是“你不能专门化你的班级和独立工作”,也就是说,你必须同时在这个例子中做到这一点。
此外,在这种情况下,您失去了专门为您的班级提供数据类型“char”的机会。 (需要在此确认)。
UPDATE ::证实,对2点
1
如果你想专注MyClass的<布尔> ::富,它应该是这样的:
template <>
void MyClass<bool>::Foo(bool A)
{
// code goes here
}
1
如果你问的是,
(1)你想有一个功能Foo()
这没有按“T采取任何参数和返回 内部void
MyClass
(2)本Foo()
应该是排他性的MyClass
当 模板类型是bool
,即只针对MyClass<bool>
那么这里是这样的:
template<class Precision>
class MyClass {
...
public:
...
void Foo(); // don't implement here
};
...
template<>
void MyClass<bool>::Foo() // implementing only for 'MyClass<bool>'
{ // invoking for other 'MyClass<>' will result in compiler error
...
}
相关问题
- 1. 功能专业化
- 2. 模板类,功能专业
- 3. C++模板部分类专业化与功能专业
- 4. C++模板功能专业化错误
- 5. 功能模板专业化失败
- 6. 模板功能专业化,C++
- 7. 专业模板类的功能
- 8. 功能模板专业化错误
- 9. 静态模板功能专业化值
- 10. 模板专业化功能的C++
- 11. 模板功能专业化默认
- 12. 澄清模板功能专业化
- 13. 模板专业化或功能超载
- 14. 模板功能专业化与超载
- 15. 完全专业化的模板功能
- 16. 模板功能专业化问题
- 17. 功能模板的部分专业化
- 18. 自学java专业技能
- 19. Suggenstion专注功能
- 20. Salesforce:如何激活专业版中的顶点类功能
- 21. ida专业虚拟功能实际声明
- 22. 具有静态功能模板的模板专业化
- 23. 具有模板功能,专业化的类模板
- 24. 类模板专业化对功能重载
- 25. 数组功能专业化不会被调用
- 26. 模板功能专业化与虚拟输入变量?
- 27. 基于静态成员类型的模板功能专业化
- 28. 类功能部分专业化与模板参数
- 29. 解决功能模板部分专业化
- 30. 模糊不清的模板功能专业化编译错误
不要使用宏写'template'线。这很难理解。而且,你的问题是什么?链接中显示的代码是否不相同? – iammilind 2012-02-22 03:45:16
不清楚问题。什么是foo专业化? – 2012-02-22 03:46:10
@ iammilind ::我想问的问题是,假设我想以不同的方式实现MyClass的函数foo,并且我不想使用专门的Template类(正如我在代码中所做的那样) ,那有可能吗?如果是的话,那么如何实现呢? –
Atul
2012-02-22 03:47:59