вывод типов по прототипу функции
От: lost_guadelenn  
Дата: 19.01.12 16:20
Оценка:
Привет.

Вот пример:

template <class A>
class Proxy
{
public:
    typedef void (*pFunc)(A *);
};

class Test
{
public:
    template<class A>
    void test(typename Proxy<A>::pFunc pf)
    {
        //
    }

    template<class A>
    void test2(void (*pFunc)(A *))
    {
        //
    }
};

void func(int * i)
{
    //
}

int main(int argc, char* argv[])
{
    Test t;
    t.test(func); // error
    t.test2(func);

    return 0;
}


По-моему, теоретически, тут все можно вывести. Но все (msvs, comeau, clang) компиляторы выдают ошибку
1. Поясните, пожалуйста, в чем тут именно затык.
2. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?
Re: вывод типов по прототипу функции
От: night beast СССР  
Дата: 19.01.12 19:43
Оценка:
Здравствуйте, lost_guadelenn, Вы писали:


_>class Test
_>{
_>public:
_>    template<class A>
_>    void test(typename Proxy<A>::pFunc pf)
_>    {
_>        //
_>    }

_>    template<class A>
_>    void test2(void (*pFunc)(A *))
_>    {
_>        //
_>    }
_>};

_>void func(int * i)
_>{
_>    //
_>}

_>int main(int argc, char* argv[])
_>{
_>    Test t;
_>    t.test(func); // error
_>    t.test2(func);

_>    return 0;
_>}


_>По-моему, теоретически, тут все можно вывести. Но все (msvs, comeau, clang) компиляторы выдают ошибку


ну, попробуй реализовать...

_>1. Поясните, пожалуйста, в чем тут именно затык.


для какого типа будет происходить инстанцирование Proxy<A>?

_>2. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?


t.test<int>( func );
Re: вывод типов по прототипу функции
От: uzhas Ниоткуда  
Дата: 20.01.12 11:06
Оценка:
Здравствуйте, lost_guadelenn, Вы писали:

_>1. Поясните, пожалуйста, в чем тут именно затык.

_>2. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?

аналогичный вопрос пережевывали здесь: http://rsdn.ru/forum/cpp/4561378.flat.aspx
Автор:
Дата: 28.12.11
Re: вывод типов по прототипу функции
От: cruelbob  
Дата: 24.01.12 21:17
Оценка:
_>По-моему, теоретически, тут все можно вывести. Но все (msvs, comeau, clang) компиляторы выдают ошибку
_>1. Поясните, пожалуйста, в чем тут именно затык.
_>2. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?

При инстанцировании шаблонного класса нужно указывать явно параметры шаблона. Вот такой код будет работать:

int main(int argc, char* argv[])
{
    Test t;
    t.test<int>(func);
    t.test2(func);

    return 0;
}


все остальное тоже самое
Twitter — http://twitter.com/Cruelbob
Блог — http://cruelbob.blogspot.ru/
Мыло — vlad.kolotvin@gmail.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.