【发布时间】:2019-12-26 18:20:16
【问题描述】:
在以下代码中,我将地址分配给静态 constexpr 成员:
struct component_type_data{};
template<class Derived>
class component{
private:
const constexpr static component_type_data type_data{};
public:
static constexpr const component_type_data* component_type = &type_data;
};
我的动机是为类型设置编译时唯一 ID。
这有效吗?代码仅从 C++17 开始编译。我可以将该指针用作模板参数。
如果这有效,编译器如何事先知道地址?
更新:
另外,跨 dll 边界会发生什么?对于同一个静态成员,每个 dll 都有自己唯一的地址,或者它们会相同?
【问题讨论】:
-
@francesco 部分,我仍然不明白编译器如何事先知道成员地址。跨 dll 边界会发生什么?对于同一类型/成员,每个 dll 都有自己的唯一地址?
-
@francesco 这可能会解决 OP 的动机,但不能回答提出的实际问题。
-
这能回答你的问题吗? Compile-time constant id