使用 yaml-cpp 转换为模板 class
Converting with yaml-cpp to a template class
我有自己的容器:
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 的一些其他功能来避免这种垃圾?
给评论
in fact the situation a bit more complex. What confused me, that MyContainer has two template arguments and convert has only one. So I should have written: 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
};
我有自己的容器:
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 的一些其他功能来避免这种垃圾?
给评论
in fact the situation a bit more complex. What confused me, that MyContainer has two template arguments and convert has only one. So I should have written:
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
};