Привет.
Вот пример:
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. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?
Здравствуйте, 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 );
Здравствуйте, lost_guadelenn, Вы писали:
_>1. Поясните, пожалуйста, в чем тут именно затык.
_>2. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?
аналогичный вопрос пережевывали здесь:
http://rsdn.ru/forum/cpp/4561378.flat.aspxАвтор:
Дата: 28.12.11
_>По-моему, теоретически, тут все можно вывести. Но все (msvs, comeau, clang) компиляторы выдают ошибку
_>1. Поясните, пожалуйста, в чем тут именно затык.
_>2. Есть ли какой-то более красивый способ, чем я сделал, обойти проблему?
При инстанцировании шаблонного класса нужно указывать явно параметры шаблона. Вот такой код будет работать:
int main(int argc, char* argv[])
{
Test t;
t.test<int>(func);
t.test2(func);
return 0;
}
все остальное тоже самое