Специализированное разбиение с параметрами шаблона - PullRequest
1 голос
/ 07 февраля 2011

У меня есть шаблон класса, MyClass<class E,class T>, и я хочу использовать:

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

как параметры шаблона шаблона в моем классе, обратите внимание на bool и пустоту, которая является частичной специализацией шаблона ....

может кто-нибудь сказать, как MyClass decleration и ctor, которые должны принимать предикат и обмен как аргументы, должны выглядеть?

Спасибо!

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

зависит, нужно ли вам использовать параметры только в конструкторе или нет.Может быть:

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)
    {
    ...
    }
...
}
0 голосов
/ 07 февраля 2011

Я только что понял это ... нет использования ctor как:

MyClass(std::unary_function<T,bool> p, std::binary_function<T,E,void> s)

функция std :: unary_function - это просто деквестрация структуры она не содержит operator () и, конечно, не является виртуальным оператором (), поэтому она не используется в качестве аргумента в функции ...

вот как это должно выглядеть:

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;
    }
};

но, как я вижу, как он работает, я не могу понять, когда используется специальное синтаксическое шаблонное удаление, связанное с "параметрами шаблона шаблона" ...

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...