2009-07-29 4 views
2

Можно ли передать указатель на функцию в качестве аргумента шаблона без использования typedef?Указатель функций в качестве аргумента шаблона?

template<class PF> 
class STC { 
    PF old; 
    PF& ptr; 
public: 
    STC(PF pf, PF& p) 
     : old(*p), ptr(p) 
    { 
     p = pf; 
    } 
    ~STC() { 
     ptr = old; 
    } 
}; 

void foo() {} 
void foo2() {} 

int main() { 
    void (*fp)() = foo; 
    typedef void (*vfpv)(); 
    STC<vfpv> s(foo2, fp); // possible to write this line without using the typedef? 
} 
+0

Это не пропускает указатель на функцию в качестве аргумента шаблона, но он передает _ type_ указатель функции. – leftaroundabout

ответ

11

Да:

STC<void (*)()> s(foo2, fp); // like this

Это то же самое, принимая typedef декларацию и удаление typedef ключевое слово и имя.

3

Это вполне возможно, Я бы также рекомендовал поиск boost :: function & boost :: bind как альтернативное решение.

0

Я не могу использовать boost, как предположил Масик (например, вы не можете использовать внешние библиотеки в своем проекте), вы можете попытаться использовать функтор.

Смежные вопросы