請參考下面的代碼
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