有没有办法Caller<pfn>
从构造函数中实例化Foo()
?
#include <iostream>
using namespace std;
struct Foo
{
template<void(*pfn)()>
struct Caller
{
static void call() { pfn(); }
};
template<typename FN>
Foo(FN fn)
{
Caller<FN>::call(); // illegal type for non-type template parameter 'pfn'
}
};
void Bar()
{
cout << "bar" << endl;
}
int main(int argc, char *argv[])
{
Foo foo(&Bar);
return 0;
}