我使用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具有模板参数特定实现和参数计数。通过使用模板中的默认设置,您可以选择仅定义一些类型参数。 –