0
我有幾個功能,我用的是已經定義類可以用作通用名稱空間(使用模板)嗎?
class Object {
struct SubObject{
//...
};
//...
};
namespace Process
{
Object::SubObject function1(Object& o){
//..
}
void function2(Object& o){
//..
}
}
現在,我要概括這些功能與模板類使用一個命名空間,我發現我不能用一個模板在整個命名空間。要麼我必須爲每個函數創建一個模板(相當乏味,因爲我必須每次鍵入每個類的結構),或者我想知道是否可以執行類似定義類而不是命名空間的操作:
template<typename TObject>
class Process
{
typedef typename TObject::SubObject TSubObject;
TSubObject function1(TObject& o){
//..
}
void function2(TObject& o){
//..
}
}
這是正確的代碼嗎?做一個我永遠不會實現的課程似乎很奇怪。
而且,我第一次寫:
typedef TObject::SubObject TSubObject;
但我的編譯器要求我在TObject的前面加上類型名,我發現這個question解釋(或者這就是我理解它),這是因爲編譯器沒有按不知道SubObject是嵌套類型還是成員變量。但是不是typedef強制後跟一個類型,然後是一個別名? 我認爲一個類成員(一個變量或函數)不能被「typedef」編輯。
非常感謝您的回答。
如果沒有實例,你不能調用你的示例中的函數,那麼你需要使它們成爲「靜態」函數!另一種選擇是簡單地在名稱空間級別提供模板化函數。 –
@πάνταῥεῖ:是的,但我必須爲命名空間中的每個函數創建一個模板,併爲每個函數中的每個嵌套類型創建一個typedef(我在Object中有十幾個嵌套類型,我想避免使用typedef/typename每次)。 – Demod
然後在模板類中使用靜態函數的其他選項。 –