【问题标题】:BOOST_AUTO And C++ User Defined TypeBOOST_AUTO 和 C++ 用户定义类型
【发布时间】:2016-05-21 12:49:34
【问题描述】:

我是 BOOST_AUTO 新手,这是一个基本问题。

我定义了自己的类并将其与 BOOST_AUTO 一起使用。根据教程:

如果您定义自己的类型,Typeof 库无法处理它 除非你让它知道这种类型。你告诉 Typeof 库 通过“注册” this 来了解类型(或模板) 类型/模板。

但是我下面的代码没有注册任何东西并且在 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

【问题讨论】:

  • 您的编译器可能支持常规的auto
  • 哦,是的! msdn.microsoft.com/en-us/library/dd293615(v=vs.100).aspx。这是否意味着在 VC++2010 中 BOOST_AUTO 会自动 #define 为 auto
  • @JavaMan:没关系,用普通的auto就行了。
  • @JavaMan,从我对 Boost 的了解来看,如果编译器支持,大多数像这样的库都非常擅长直接使用更新的功能。

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


【解决方案1】:

来自docs

BOOST_AUTO 宏在 C++ 中模拟建议的 auto 关键字。

查看代码,他们似乎将 BOOST_AUTO 替换为 BOOST_TYPEOF

typeof 似乎是 GCC 编译器中 decltype 的旧扩展名。 (见this SO question)。 boost typeof 库的代码显然没有为 msvc 使用 auto 关键字(请参阅here)。

似乎在编写这个库时,有些编译器确实支持 auto 关键字,而另一些则不支持。如果要在不支持该功能的架构上编译代码,则需要注册。

无论如何,既然 C++11 已经发布了一段时间。如果你的编译器已经支持 auto 关键字,那么使用这个库应该被认为是不好的做法,因为这个库只是为了模拟提议的特性而存在的。

当然,由于某种原因你必须编译成 C++03。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2019-05-25
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多