作为学术兴趣,使用绑定模板(特别是boost :: lambda)会阻止内嵌吗?如果是这样,除了使用声明的仿函数之外,还有一个不会阻止内嵌的boost :: lambda形式吗? (特别是在最新的gcc中)
namespace bll = boost::lambda;
class MyItem
{
public:
float attribute() { return 4; }
}
struct AttributeLessConst
{
AttributeLess( float value_a ) : value( value_a ) {}
bool operator()( const MyItem & a )
{
return a.attribute() < value;
};
const float value;
}
std::list<MyItem> myList;
remove_if_seq( myList, AttributeLessConst( 1.5 ) ); // in-linable // yes
remove_if_seq( myList, bll::bind(&MyItem::attribute, *bll::_1) < 1.5 ); // yes?
答案 0 :(得分:2)
没有。除了高级编译器*技术之外,没有什么可以阻止内联。除非Boost.Lambda使用它没有理由使用的类型擦除,否则它所做的一切都可以像手写代码一样简单地进行检查。 Boost.Lambda documentation中的相关片段表明图书馆实现了这一承诺。
*:和/或运行时技术不仅考虑程序而且考虑例如共享库和动态加载的模块。