我有一个只能用作全局变量的库类型,并且必须进行链接器初始化(即它在静态初始化之前必须具有正确的初始值)。我有充分的理由认为,如果我做以下两件事之一,就会得到所需的东西:
Type var = { expr, expr };
语法。 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>();
myobject
是const
中的constexpr
。