BOOST_AUTO和C ++用户定义类型

时间:2016-05-21 12:49:34

标签: c++ boost template-meta-programming typeof

我是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

1 个答案:

答案 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。