我可以这样做吗?
template<function_pointer_type pointer_name> struct structure1{
//here I call pointer_name(0)
};
void* function1 = [&](int a) {
return a * a;
}
structure1<function1> b;
我试过但它从未编译过。
答案 0 :(得分:1)
那么,代码有什么问题?
function1
不是常量表达式,因此不能用作模板参数。我建议使用函数对象的模板参数,或std::function
。
功能对象:
template <class FunctionObject>
class A
{
private:
FunctionObject fun;
public:
A(FunctionObject f) : fun(f) {}
void f() { cout << fun(5) << endl; }
};
template <class FunctionObject>
A<FunctionObject> make_A(FunctionObject f)
{
return A<FunctionObject>(f);
}
std::function
:
template <class FunctionType>
struct B
{
std::function<FunctionType> fun;
};
用法:
void usage()
{
auto a = make_A([](int a) {return a*a; });
a.f();
B<int(int)> b;
b.fun = [&](int a) {return a*a; };
cout << b.fun(10) << endl;
}
答案 1 :(得分:1)
使其尽可能与原始问题完全相似(使用lambda和模板化结构等):
#include <iostream>
template<typename F>
struct structure1 {
structure1(F x) : f(x) {}
int operator() (int a) { return f(a); };
F f;
};
int(*function1)(int) = [&](int a) {
return a * a;
};
int main() {
structure1< int(*)(int) > x(function1);
std::cout << x(4) << std::endl;
return 0;
}
我用g++ -std=c++11 test.cpp