使用模板参数进行特殊分区

时间:2011-02-07 13:51:59

标签: c++ templates

我有一个模板类MyClass<class E,class T>,我想使用:

std::unary_function<T,bool> _predicate; std::binary_function<T,E,void> _swaper;

作为我班级中的模板模板参数,注意bool和void是部分模板专业化....

有人可以告诉MyClass如何使用谓词和应该采用谓词和更低价的ctor应该是什么样的?

谢谢!

2 个答案:

答案 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 ...

感谢。