我有一个只能用作全局变量的库类型,并且必须进行链接器初始化(即它在静态初始化之前必须具有正确的初始值)。我有充分的理由认为,如果我做以下两件事之一,就会得到所需的东西:

  • 将其设置为POD type,将用户提供的成员放在第一位,并信任用户将正确数量的表达式传递给Type var = { expr, expr };语法。
  • 将实现私有(private)化,提供constexpr构造函数,并依赖用户将所有实例声明为constexpr

  • 这些都不是好事,因为它取决于用户是否将事情弄糟了。

    缺少宏魔术,是否有任何方法可以强制类型的所有实例均为constexpr

    最佳答案

    创建一个

    template<Type1 value1, Type2 value2>
    constexpr MyType make_MyTYpe(/* No args */)
    {
        return MyType(value1, value2); // call the (private) constexpr constructor
    }
    

    并且,如果您的类型仅提供const方法,则用户必须使用const对象。
    const MyType myobject = make_MyType<4, 2>();
    
    myobjectconst中的constexpr

    10-07 19:27
    查看更多