检查std :: vector要求的宏

时间:2015-05-05 09:32:50

标签: c++ c++11 vector c++03

我有一个不可变的类 - 所有成员都是const。由于它是不可变的,因此没有默认构造函数,也没有复制赋值。在C ++ 11中,我在std::vector中使用此类没有任何问题。

现在我需要在仅支持C ++ 03的环境中编译代码。显然我的课不是CopyAssignable,C ++ 03 std::vector需要这个,我不能把类的实例放在矢量中。

由于代码将在C ++ 11友好的编译器上维护,并且只在C ++ 03环境中编译和运行,我认为最简单的方法是删除{{1 C ++ 03中的修饰符。这将使类CopyAssignable并将在C ++ 03中工作。在C ++ 11中,我仍然希望该类是不可变的。

我浏览了Boost C++11 Macros的长列表,但是找不到能告诉我std :: vector是否需要CopyAssignable类型的列表。

有没有办法做到这一点,或者我应该介绍我自己的宏,它将在编译期间设置?

1 个答案:

答案 0 :(得分:0)

可能最容易检查C ++版本; #if __cplusplus < 201103L应该足够了。据推测,没有Boost宏检查这一点,因为所有C ++ 11编译器在这方面都是合规的。