我使用xsd從xml模式文件創建C++代碼。對於一個xml類型,創建多個函數(用於序列化等)。
如果類型被稱爲XmlType將創建下列形式的多種功能:具有相同名稱但參數類型不同的多個函數作爲模板參數
XmlType XmlType_(const XmlType& a, const string& b)
string XmlType_(const XmlType& a)
...
這是正常的功能,而不是XmlType將的成員,它們都具有相同的名稱。 對於XmlType2該功能將被稱爲XmlType2_。
我想爲我的xml方案的所有不同的xml類型編寫一個實用程序模板類。不同的功能將被稱爲洞察這個類。我到目前爲止是這樣的:
XmlUtil<XmlType, XmlType_, XmlType_> util;
這感覺有點多餘的,會變得更糟:
template<typename T>
using TFunc1 = T (*)(const T&, const string&);
template<typename T>
using TFunc2 = string (*)(const T&);
template<typename T, TFunc1<T> func2, TFunc2<T> func2>
class XmlUtil {
...
};
當如果必須這樣做,這樣創建XmlUtil類的一個實例,當我必須通過更多的功能作爲參數。
我想使用的Util類是這樣的:
XmlUtil<XmlType, XmlType_> util;
甚至更好這樣
XmlUtil<XmlType> util;
我能想到的就是以某種方式使用所定義的唯一途徑,但它不感覺不錯。
有沒有其他的方法來做到這一點?
編輯: 我現在使用一個定義:
#define TRPL(name) name, name ## _, name ## _
...
XmlUtil<TRPL(XmlType)> util;
我將修改這一點,如果我找到一個更好的(也許覆蓋套像Yakk在他的回答提出)。
這是C++ 11特有的,我相信嗎? –
是的,我使用的是C++ 11(MinGW和gcc 4.8)。添加了標籤。 – guini
模板專業化。在C++中使用它進行等效的Func <>(在c#中),其中Execute具有模板參數特定實現和參數計數。通過使用模板中的默認設置,您可以選擇僅定義一些類型參數。 –