> Спасибо, хороший пример.
> А по-проще, чтобы просто функцию как параметр шаблона класса можно было передать? Хм, оказывается можно и так:
#include <iostream>typedef int (*MyFunPtrType)(int);
template<MyFunPtrType fptrParam>
class A
{
int x;
MyFunPtrType fptr;
public:
A() : fptr(fptrParam) { x = fptr(2);}
int getX() { return x; }
};
int intQuadruple(int i) { return 4 * i; };
int main(int argc, char *argv[])
{
A<intQuadruple> quadrupler;
std::cout << "quadrupler.getX(): [" << quadrupler.getX() << "]\n";
}
Это компилится и печатает:
quadrupler.getX(): [8]
Тут надо было догадаться что fptr, который является не типом, а членом класса, нужно инициализировать в конструкторе (A() : fptr(fptrParam) ... ), а значение которым он инициализируется как раз и передается как не-типовий параметр темплейта (template<MyFunPtrType fptrParam>) :)