C++ 如何减少模板参数的多个参数

C++ 如何减少模板参数的多个参数,c++,templates,C++,Templates,我需要将双参数模板调整为单参数模板 我想绑定模板的第一个参数: template<class T1, class T2> struct Two_Parameter_Template { // Two ctor's Two_Parameter_Template() { }; template<class Param> Two_Parameter_Template(Param) { /* ... */ } }; 模板 结构双参数模板{ //两个部门


我需要将双参数模板调整为单参数模板

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

template<class T1, class T2>
struct Two_Parameter_Template {
   // Two ctor's
   Two_Parameter_Template() { };
   template<class Param>
   Two_Parameter_Template(Param) { /* ... */ }
};
模板
结构双参数模板{
//两个部门
两个_参数_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);            
       }
   };
};  
//绑定模板的第一个参数“绑定”,此模板应按
//减少所需参数数量的适配器
模板
结构绑定1{
模板//这是生成的单参数模板
结构评估{
评估(){
绑定();
}
模板
eval(t2obj){
绑定(obj);
}
};
};  
因此,我可以稍后使用此模板作为另一个模板的参数,使用它自己的一个参数(类似于bellow):

模板
结构模板{
//...
};
//代码的后面部分
typedef SomeTemplate::eval concrete类;

问题是C++中有一个语法来支持这个吗? 致以最诚挚的问候,
Marcin

您可以使用

但是,它不会完全按照您希望的方式运行

编辑: 我看到您在代码中犯了一个小错误,即它不能像您预期的那样工作:

typedefsometemplateConcreteClass


如果你把评估放进去,它会工作的。这可能是解决问题的最简单方法。我希望这次我解决了你的问题;-)

你能让你的例子更具体一些吗?在这个例子中,双参数模板是一个检查策略,它可以抛出T1类型的异常。我需要预先定义异常的类型(以便此策略的“可见”参数的数量将是1而不是2),并将此策略传递给另一个模板。谢谢您的精确回答。困难的部分是,我只需要绑定“Two_parameter_Template”模板的第一个参数,剩下的未指定。模板在绑定后不能“完全”具体化。第二个参数必须稍后传递。我刚刚意识到您的代码几乎可以正常工作。见上面的编辑。就是这样!我可以相信,我发布这个问题是因为这样一个愚蠢的打字错误:)。模板的语法可以驱动一个螺母。。。非常感谢您发现了错误。
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;