动态扩展boost :: variant的类型

时间:2016-02-19 09:56:53

标签: c++ boost boost-mpl boost-variant variadic-macros

我必须编写一个将数据导出为各种格式的库。每种格式都是给定boost::variant的类型,例如

typdef boost::variant<csv, xml, hdf5> TFormat

格式为csv,xml和hdf5。这种方法对我来说非常有用。该库应该是非常通用的,并且可以从客户端扩展到可能的扩展。因此,如果客户端可以以统一的方式添加用户定义的格式,那将是很好的。

我希望I客户端可以添加几个宏,如

REGISTER_FORMAT(binary)
REGISTER_FORMAT(mpeg)

然后我的typedef神奇地改为

typedef boost::variant<csv, xml, hdf, binary> TFormat.

我已经想出如何使用以下mpl-code构建一个类型动态boost::variant,幸运地编译它与MSVC2010。

#include <boost/variant/variant.hpp>
#include <boost/mpl/vector.hpp>

int main() {
    // Adding the type int, to a vector containing the types double and std::string
    using namespace boost;
    typedef mpl::vector< double, std::string > DefaultTypes;
    typedef mpl::push_front< DefaultTypes, int >::type ExtendedTypes;

    // typedef TFormat of type boost::variant<double, std::string, int>
    typedef boost::make_variant_over< ExtendedTypes >::type TFormat;
    return 0;
}

我仍然无法实现上述宏,因为事先不清楚客户端调用REGISTER_FORMAT的频率,或者他是否会使用宏。

有没有人知道如何实现这样的宏或类似的东西?

0 个答案:

没有答案