我有一个不可变的类 - 所有成员都是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类型的列表。
有没有办法做到这一点,或者我应该介绍我自己的宏,它将在编译期间设置?
答案 0 :(得分:0)
可能最容易检查C ++版本; #if __cplusplus < 201103L
应该足够了。据推测,没有Boost宏检查这一点,因为所有C ++ 11编译器在这方面都是合规的。