如何减少模板模板参数的参数

时间:2010-10-10 18:16:41

标签: c++ templates


我需要将两个参数模板调整为一个参数模板。

我想绑定模板的第一个参数:

template<class T1, class T2>
struct Two_Parameter_Template {
   // Two ctor's
   Two_Parameter_Template() { };
   template<class Param>
   Two_Parameter_Template(Param) { /* ... */ }
};

使用antoher(非侵入式)模板机制:

//bind the first parameter of a template "bound", this template should work as 
//an adapter reducing the number of parameters required
template<class X, template<class, class> class bound>
struct bind_1st {
   template<class T> // this is the resulting one parameter template
   struct eval {
       eval () {
           bound<X, T>();
       }
       template<class T2>
       eval (T2 obj) {            
           bound<X, T>(obj);            
       }
   };
};  

这样我以后就可以使用这个模板,作为另一个模板的参数,只有一个自己的参数(比如波纹管):

template <template<class> class One_Parameter_Template>
struct SomeTemplate {
   //...
};

// Later in the code
typedef SomeTemplate<bind_1st<Bound_Param_class, Two_Parameter_Template> >::eval    ConcreteClass;

问题是 - C ++中是否有支持此语法的语法。

最诚挚的问候,
马尔钦

1 个答案:

答案 0 :(得分:1)

您可以将boost mpl bind用于此

然而,它不会完全按照你希望的方式行事

编辑: 我看到你在代码中犯了一个小错误,它没有按预期工作:

typedef SomeTemplate< bind_1st<Bound_Param_class, Two_Parameter_Template>::eval > ConcreteClass;

如果你把eval放在里面就行了。这可能是解决问题的最简单方法。我希望这次能让你的问题更好; - )