C++ 内联函数作为模板参数,不使用函数指针
我正在开发一个对象Foo,它有几个成员变量和一个主要成员函数bar()C++ 内联函数作为模板参数,不使用函数指针,c++,templates,inline,C++,Templates,Inline,我正在开发一个对象Foo,它有几个成员变量和一个主要成员函数bar() 模板 福 { 公众: T bar() { ... 返回m_a+myfunction(m_b); } 私人: T m_a,m_b; }; 目前myfunction是另一个成员函数。但我希望能够写出这样一部主要作品: float newfunction(float) {....} void main() { Foo<float, newfunction> foo; float result = f
模板
福
{
公众:
T bar()
{
...
返回m_a+myfunction(m_b);
}
私人:
T m_a,m_b;
};
目前myfunction是另一个成员函数。但我希望能够写出这样一部主要作品:
float newfunction(float) {....}
void main()
{
Foo<float, newfunction> foo;
float result = foo.bar();
}
float newfunction(float){….}
void main()
{
富富,;
浮点结果=foo.bar();
}
因此,newfunction将在bar()中内联使用,而不是myfunction。我不想为了性能目的而使用函数指针:bar()使用openMP,myfunction()被设计为每秒被cpu的每个核心调用数千次。所以我认为在这种情况下,我的函数必须是内联的,不能使用指针。而newfunction是一个简单的函数,计算成本非常低。如果您只在
Foo::bar
函数中使用newfunction
,那么我建议您将其作为参数传递给bar
函数:
template<typename T>
struct Foo
{
template<typename F>
T bar(F func)
{
return m_a + func(m_b);
}
T m_a, m_b;
};
用作
Foo<float> foo(newfunction);
float result = foo.bar();
Foo-Foo(newfunction);
浮点结果=foo.bar();
请在对性能做出假设之前进行测量。我真的怀疑调用函数指针是否是任何代码中的瓶颈。事实上,bar()使用openMP和myfunction()被设计为每秒被cpu的每个核心调用数千次。所以我认为在这种情况下,我的函数必须是内联的,我不能使用指针,但你应该测量它。你的函数可能做了很多事情,与函数的开销相比,调用指针的开销非常低。不,myfunction是一个非常简单的函数,例如它可能只是一个求和或乘积。谢谢,但我正在寻找编译时固定的函数。我不想使用指针。@Nodera为什么?你想解决的实际问题是什么?您想要constexpr
函数吗?因为否则,函数调用无论如何都会在运行时发生,即使是“内联的”。也许您应该花一些时间阅读,并思考如何改进您的问题,以告诉我们您希望使用此特定解决方案解决的实际问题。
Foo<float> foo;
float result = foo(newfunction);
template<typename T>
struct Foo
{
Foo(std::function<T(T)>& func)
: m_function(func)
{}
T bar()
{
return m_a + m_function(m_b);
}
T m_a, m_b;
std::function<T(T)> m_function;
};
Foo<float> foo(newfunction);
float result = foo.bar();