我正在使用xsd从 xml 模式文件创建 c++ 代码。对于 xml 类型,会创建多个函数(用于序列化等)。
如果该类型称为XmlType,则会创建以下形式的多个函数:
XmlType XmlType_(const XmlType& a, const string& b)
string XmlType_(const XmlType& a)
...
这是普通函数,不是 XmlType 的成员,它们都具有相同的名称。对于XmlType2,函数将被称为XmlType2_。
我想为我的 xml 方案的所有不同 xml 类型编写一个实用程序模板类。不同的功能将被称为洞察这个类。我到目前为止是这样的:
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类的实例时,如果必须这样做:
XmlUtil<XmlType, XmlType_, XmlType_> util;
当我必须将更多函数作为参数传递时,这感觉有点多余并且变得更糟。
我想像这样使用 util 类:
XmlUtil<XmlType, XmlType_> util;
甚至更好的是这样
XmlUtil<XmlType> util;
我能想到的唯一方法是以某种方式使用define,但感觉不对。
还有其他方法可以做到这一点吗?
编辑: 我现在使用定义:
#define TRPL(name) name, name ## _, name ## _
...
XmlUtil<TRPL(XmlType)> util;
如果我找到更好的东西,我会编辑这个(也许像 Yakk 在他的回答中建议的那样覆盖集合)。