我是BOOST_AUTO的新手,这是一个基本问题。
我定义了自己的类并将其与BOOST_AUTO一起使用。根据教程:
如果您定义自己的类型,则Typeof Library无法处理它 除非你让它知道这种类型。你告诉Typeof图书馆 关于一种类型(或模板)通过“注册”这个 类型/模板。
但我的代码下面没有注册任何内容并在VC ++ 2010中正确运行。这个注册真的有必要吗?我做错了吗?
#include <boost/typeof/typeof.hpp>
using namespace std;
namespace NS1 {
struct X {
X(const X& x){s=x.s+1;}
X(){s=3;}
int s;
};
}
int _tmain(int argc, _TCHAR* argv[])
{
NS1::X x;
BOOST_AUTO(y,x);
cout << y.s << endl;
return 0;
}
输出:4
答案 0 :(得分:0)
来自docs:
BOOST_AUTO宏在C ++中模拟建议的auto关键字。
查看代码似乎将BOOST_AUTO
替换为BOOST_TYPEOF
。
typeof
似乎是GCC编译器中decltype
的旧扩展名。
(见this SO question)。 boost类型库的代码并没有明确地为msvc使用auto关键字(参见here)。
在编写这个库的过程中,似乎有一些编译器支持auto关键字,而其他编译器则没有。如果您想在不支持此功能的体系结构上编译代码,则必须进行注册。
在任何情况下,由于C ++ 11现在已经发布了一段时间。如果编译器已经支持auto
关键字,则使用此库应被视为不良做法,因为此库仅用于模拟建议的功能。
当然,除了某些原因你必须编译到C ++ 03。