【发布时间】:2018-11-26 09:59:31
【问题描述】:
我有一些constexpr 函数可以让我简单地改变我的算法的行为。这些函数从一些变量中推断出它们的返回值。一个最小的示例如下所示:
// A.h
constexpr std::array<int,3> a = {1,2,3};
constexpr int Foo() {return a[1]*a[2];}
constexpr int Bar() {return a[3];}
现在,所有这些都在头文件中实现,因为我希望内联方法。但是,我不想将a 暴露给包括A.h 在内的任何人。我怎样才能做到这一点?
【问题讨论】:
-
正如
constexpr暗示inline和inline要求每个调用者都遇到过该函数的定义,而这些定义需要知道a,我想你已经敬酒了。detail命名空间是否足够? -
是的,不是的。我知道
detail命名空间概念,但希望会有更复杂的东西。无论如何,谢谢! -
您也可以将
a设为类的私有成员,然后将公共内容(Foo()、Bar())设为friend函数。a仍将存在于每个人看到的源代码中,但编译器会更好地阻止不明智的直接访问。 -
我认为您可以为此使用 extern,请参阅 stackoverflow.com/questions/30208685/…,但它会抵消内联优化器。