【问题标题】:Macro for defaulted constructors possible, pending compiler support?默认构造函数的宏可能,等待编译器支持?
【发布时间】:2012-06-19 09:55:35
【问题描述】:
struct Foo {
    int data;
    Foo() = default;
    Foo(const Foo& arg) = default;
};

但是我的编译器doesn't have defaulted constructors yet

我可以定义像DEFAULTED 这样的宏来代替= default 吗?如果它只是离开该行

    Foo(const Foo& arg);

编译器仍会生成其默认值,还是会抱怨?

【问题讨论】:

  • 这似乎很困难,因为“= default”东西的行为改变了想要的函数(默认/复制构造函数)的函数。

标签: c++ constructor c++11 c++03


【解决方案1】:

当然可以:

#if __cplusplus == 201103L
# define DEFAULTED(func) func = default;
#else
# define DEFAULTED(func)
#endif

struct foo
{
    DEFAULTED(foo())
};

但是:一些编译器支持 C++11 的部分内容,并且可能将 __cplusplus 设置为 201103L,即使它们不支持默认构造函数。

【讨论】:

  • 但是如果你在 C++03 中这样做,编译器不会因为你重新声明它而要求函数定义吗?
  • @Morwenn 正确。更新了生成默认构造函数的答案,或者根本不生成(这将在旧 C++03 中生成“默认”构造函数)。
  • 我认为只要使用 201103L 之后的任何版本,就必须更新此代码,因为检查是针对 == 的。但到那时,可能值得将代码更新为 =default。
猜你喜欢
  • 2018-10-04
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多