k06*_*06a 8 c++ templates c++11
如何在不使用c ++ 0x标准的情况下实现auto关键字功能?
for(std::deque<std::pair<int, int> >::iterator it = points.begin();
it != points.end(); ++it)
{
...
}
Run Code Online (Sandbox Code Playgroud)
也许这样的课:
class AUTO
{
public:
template <typename T1>
AUTO(T1);
template <typename T2>
operator T2();
};
Run Code Online (Sandbox Code Playgroud)
有了这样的用法:
for(AUTO it = points.begin(); it != points.end(); ++it)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是,T1和T2是不同的.如何将关于T1的信息移动到运营商T2()?真的有可能吗?
dir*_*tly 12
如果可以轻松实现库扩展,则不需要语言扩展.有关自动提案的详细信息,请参阅N1607.
但是,关于Boost.Foreach的文章(哪种做你想要的)宏可能有助于理解与这种实现相关的问题.
什么是BOOST_FOREACH?
在C++中,编写迭代序列的循环是单调乏味的.我们可以使用迭代器,这需要相当数量的样板,或者我们可以使用std :: for_each()算法并将我们的循环体移动到谓词中,这需要不少的锅炉板并迫使我们移动我们的远离它将被使用的逻辑.相比之下,其他一些语言,如Perl,提供了一个专用的"foreach"结构,可以自动执行此过程.BOOST_FOREACH就是这样的C++构造.它为我们迭代序列,使我们不必直接处理迭代器或编写谓词.
BOOST_FOREACH旨在提高易用性和效率.它不进行动态分配,不进行虚函数调用或通过函数指针调用,也不进行对编译器优化器不透明的调用.这导致近乎最佳的代码生成; BOOST_FOREACH的性能通常在等效手动编码循环的几个百分点内.尽管BOOST_FOREACH是一个宏,但它是一个表现非常好的宏.它只对其论点进行一次评估,不会产生令人讨厌的意外.