使用yaml-cpp转换为模板类

时间:2015-01-13 10:59:22

标签: c++ templates yaml specialization yaml-cpp

我有自己的容器:

template<class T>
class MyContainer {}

我正在使用yaml-cpp将一些数据加载到此容器中。 所以我需要为convert struct编写专门化:

template<> struct convert< MyContainer<int> > {};
template<> struct convert< MyContainer<double> > {};
template<> struct convert< MyContainer<char> > {};
template<> struct convert< MyContainer<MyClass> > {};

......等等。

最后,我写道:

// ...
node.as< MyContainer<int> >
// ...

但事实是MyContainer的每个专业都是一样的。 因此,convert的每个专业化都是相同的,并且它们是多余的:

template<> struct convert< MyContainer<int> > { /* the same code */ };
template<> struct convert< MyContainer<double> > { /* the same code */ };
template<> struct convert< MyContainer<char> > { /* the same code */ };
template<> struct convert< MyContainer<MyClass> > { /* the same code */ };

是否可以使用c ++本身或yaml-cpp的其他一些功能来避免这种垃圾?

1 个答案:

答案 0 :(得分:1)

发表评论

  事实上情况有点复杂。令我困惑的是,MyContainer有两个模板参数,转换只有一个。所以我应该写:template<class A, class B> struct convert< Manager<A, B> > { /**/ };

尝试可变的部分特化

template <typename... Ts> 
struct convert< MyContainer<Ts...> > { 

    using container_type = MyContainer<Ts...>;

    // ... the specialized implementation, once

};