gpt4 book ai didi

c++ - 内联函数作为模板参数,不使用函数指针

转载 作者:行者123 更新时间:2023-11-30 03:28:31 25 4
gpt4 key购买 nike

我正在开发一个对象 Foo,它有几个成员变量和一个主要成员函数 bar()。

template<typename T>
Foo
{
public:
T bar()
{
...
return m_a + myfunction(m_b);
}

private :
T m_a, m_b;
};

目前 myfunction 是另一个成员函数。但我希望能够像这样写一个 main :

float newfunction(float) {....}

void main()
{
Foo<float, newfunction> foo;
float result = foo.bar();
}

因此,将在 bar() 中内联使用 newfunction 而不是 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;
float result = foo(newfunction);

另一方面,如果您需要存储要在 Foo 的多个成员函数中使用的函数,我建议您阅读 std::function .

然后你可以做类似的事情

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();

关于c++ - 内联函数作为模板参数,不使用函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com