我有自己的容器:

template<class T>
class MyContainer {}

我正在使用 yaml-cpp 将一些数据加载到这个容器中。
所以我需要为 convert 结构编写特化:
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 的其他一些功能来避免这些垃圾?

最佳答案

给评论



尝试可变参数部分特化

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

    using container_type = MyContainer<Ts...>;

    // ... the specialized implementation, once

};

10-08 09:45