相关疑难解决方法(0)

如何检测类中是否存在特定的PRIVATE成员变量?

这个问题是基于这篇文章

目标:我想知道一个类是否有成员变量x。我想收到true无论此变量是否为privatepublicprotected

方法:如果类有成员变量,您可以使用以下代码获取信息:


template <typename T, typename = int>
struct HasX : std::false_type { };

template <typename T>
struct HasX <T, decltype((void) T::x, 0)> : std::true_type { };
Run Code Online (Sandbox Code Playgroud)

使用它

if constexpr (HasX<my_class>::value) {
   // do stuff with x
} else {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在这种情况下不起作用

struct my_class {
private:
   int x;
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这项工作?我想HasX<my_class>::valuetrue

想法:

使用friend可以访问T::x. 这似乎不起作用。看看这个活生生的例子

c++ friend template-meta-programming constexpr

4
推荐指数
1
解决办法
129
查看次数