我想覆蓋具有相同參數類型但具有不同邏輯含義的函數。我已經試過類似:C++中具有相同參數類型的函數過載
class T
{
};
typedef T Age;
typedef T Height;
typedef T Weight;
void foo(Age a){}
void foo(Height a){}
void foo(Weight a){}
但我有構建錯誤: 錯誤C2084:函數 '無效美孚(年齡)' 已經有一個身體
一個解決辦法是:
class Age : public T{};
class Height : public T{};
class Weight : public T{};
但我不想只爲了這個目的用新類填充我的命名空間。
如何我可以做到這一點,而不使用派生類?
編輯:我的代碼是在CPP文件,我不使用頭。這只是一個簡單的例子。全CPP內容是在這裏:
class T
{
};
typedef T Age;
typedef T Height;
typedef T Weight;
void foo(Age a){}
void foo(Height a){}
void foo(Weight a){}
int main()
{
return 0;
}
錯誤消息: 的.cpp(10):錯誤C2084:函數 '無效美孚(年齡)' 已經有一個身體
'typedef'創建T的一個別名,即使你希望有新的類型這種填充命名空間 –
,你只*有*申報新類型。 'typedef'只是爲同一類型創建一個新的*名稱*。假設'T'是一個'int' - 編譯器如何解析'foo(42)'? –
@BoPersson我永遠不會用直接值調用函數。這些函數是序列化類的一部分,我需要以不同的方式序列化,具體取決於文件類型,Path對象 – Felics