要最小化,请查看演示代码:
const some_type A,B,C;
// global constants with non-integral, non-POD,
// non-trivially copyable type and is very expensive to copy
class cls{
(const?) some_type(*&?) item;
};
我目前只是使用地图来模仿枚举,但它似乎相当慢。我想要的是确保item
中的class cls
是以上A,B,C
之一,最好是静态的,并提高性能。 (似乎从地图返回会导致地图改变状态或至少进行一些变化,每次分析都很慢)
我尝试在自定义类上使用枚举,但它抱怨底层类型必须是整数类型。应该可以使用reinterpret_cast
指针作为解决方法,但仍然不应该这样做,这对吗?
有什么建议吗?
答案 0 :(得分:1)
您可以使some_type
的构造函数为private,只允许一个类构造该类型。
enum 将在该类中实现:
struct some_type {
// Making copy and move constructor deleted will
// prevent the creation of any other instances.
some_type(some_type&&) = delete;
some_type(const some_type&) = delete;
some_type& operator=(some_type&&) = delete;
some_type& operator=(const some_type&) = delete;
// The `enum`
static some_type A, B, C;
private:
// The constructor is private here, only us can construct the type.
some_type() = default;
};
some_type some_type::A;
some_type some_type::B;
some_type some_type::C;
在以后的代码中,您无法创建或复制此类的实例。
因此,您的类型cls
将使用该程序的唯一现有实例:
struct cls {
cls(const some_type& item_) : item{item_} {}
const some_type& item;
};
int main() {
// Working!
cls myCls{some_type::A};
// error there, trying to create a new instance that is not A, B or C
//cls myCls2{some_type{}};
}