我有一个模板类MyClass<class E,class T>
,我想使用:
std::unary_function<T,bool> _predicate
;
std::binary_function<T,E,void> _swaper
;
作为我班级中的模板模板参数,注意bool和void是部分模板专业化....
有人可以告诉MyClass
如何使用谓词和应该采用谓词和更低价的ctor应该是什么样的?
谢谢!
答案 0 :(得分:1)
取决于您是否只需要在构造函数中使用参数。可能是:
class MyClass
{
template <class T, class E>
MyClass(std::unary_function<T,bool> p, std::binary_function<T,E,void> s)
{
...
}
...
}
或
template <class T, class E>
class MyClass
{
MyClass(std::unary_function<T,bool> p, std::binary_function<T,E,void> s)
{
...
}
...
}
答案 1 :(得分:0)
我刚想通了...... 没有像ctor那样使用ctor。
MyClass(std::unary_function<T,bool> p, std::binary_function<T,E,void> s)
std :: unary_function只是一个struct decleration 它不包含operator()和ofcourse而不是虚拟运算符(),因此它不能用作函数中的参数...
它应该是这样的:
template <class T, class E,class PredicateFunctionUnaryOperator,class SwapFunctionBinaryOperator>
class MyClass
{
private:
PredicateFunctionUnaryOperator _p;
SwapFunctionBinaryOperator _s;
T _arg1;
E _arg2;
public:
MyClass(PredicateFunctionUnaryOperator p, SwapFunctionBinaryOperator s,T arg1,E arg2): _p(p),_s(s)
{
_arg1 = arg1;
_arg2 = arg2;
}
void f()
{
std::cout<<"Unary Function output is :"<<_p(_arg1)<<endl;;
std::cout<<"Binary Function Output is:"<<_s(_arg1,_arg2);
std::cout<<"Chauoo!!"<<endl;
}
};
但是我可以看到它的工作我无法理解何时使用与“模板模板参数”相关的特殊语法模板decleration ...
感谢。