我的目标是创建一个包含由类组成的元组的类,所有这些类都有一个 void update() 方法,它允许以最小的开销连续调用所有包含的 update() 方法。这是我的代码:
template< typename... Tel >
class ExecSet
{
private:
std::tuple<Tel...> m_data;
//Compile-time Recursive
template<int _iter, typename _Head, typename... _Tail>
inline void _update()
{
std::get<_iter>(m_data).update();
_update< _iter + 1, _Tail... >();
}
//Base case
template<int _iter>
inline void _update()
{
//Do nothing here
}
public:
inline void update()
{
_update<0, Tel...>();
}
};
class Foo
{
//..
inline void update()
{
std::cout << "An update of Foo " << m_i << "\n";
}
private:
int m_i;
};
class Bar
{
//..
inline void update()
{
std::cout << "An update of Bar " << m_i << "\n";
}
private:
int m_i;
};
代码编译并按预期执行测试。我的问题是,我能否 100% 确定 ExecSet::update() 将与内部进行的每个递归调用一起完全内联?我想它应该是因为这都是在编译时确定的。在 -O3 下一切都应该内联,对吗?
最佳答案
不,你不能。 C++ 标准不保证函数被内联,即使您添加了 inline
说明符也是如此。
关于c++ - 可变参数模板中的编译时递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763751/