Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > шаблон в шаблоне


Автор: MAKCim 5.4.2006, 21:53
здравствуйте!
следующий код отказывается компилироваться (g++ 4.0.2)

Код

template<class Tp_> struct class_name;
template<class Rt_, class Cl_> struct class_name<Rt_ Cl_::*>
    {typedef Cl_ Type_;};

template<class Tp_> class CT_checker
{
private:
    typedef char True_type_;
    typedef struct {True_type_ array[2];} False_type_;

    template<class Up_, Up_ object> struct checker {};

    template<class Up_> static True_type_ check
        (checker<Up_, /*      &typename class_name<Up_>::Type_::set         */      >*);      //проблема тут
    template<class Up_> static False_type_ check(...);
public:
    ...
};

почему так нельзя сделать?

Автор: Daevaorn 5.4.2006, 22:34
MAKCim,
Не понятно, чего ты хочешь получить в итоге. Плохо читаемый код. Даже шаблоны можно сделать удобоваримыми для чтения, у тебя помойму не получилосьsmile

Автор: Chaos A.D. 6.4.2006, 08:03
У тебя в комментарии ненужный знак &.

Автор: MAKCim 6.4.2006, 09:40
Цитата

Не понятно, чего ты хочешь получить в итоге.

compile-time проверку класса/структуры на наличие методы с определенной сигнатурой
Код

//пример

class B
{
...
};

class A
{
    void set(const B& obj_, bool mask_) {...}
};
...

template<class Tp_> void Test(const Tp_& obj_)
{
    if (CT_checker<void (Tp_::*)(const B&, bool)>::has) {...}
}
...

int main()
{
    A a;
    Test(a);
}

Цитата

Плохо читаемый код. Даже шаблоны можно сделать удобоваримыми для чтения, у тебя помойму не получилось

научи! smile
Цитата

У тебя в комментарии ненужный знак &.

и с ним и без него не работает

Автор: likehood 6.4.2006, 10:39
Код

&typename class_name<Up_>::Type_::set


а зачем здесь typename?

Автор: MAKCim 6.4.2006, 20:15
Цитата

а зачем здесь typename?

действительно без него работает, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)