gpt4 book ai didi

c++ - 使用 C++17 检测类成员是否存在

转载 作者:行者123 更新时间:2023-12-01 15:07:52 25 4
gpt4 key购买 nike

7 年前我会写这样的东西:

#include <iostream>

struct A {};

struct B {
static const char* message;
};
const char* B::message = "Hello, world!";

template <typename T>
void PrintMessage(...) {}

template <typename T>
void PrintMessage(decltype(&T::message)) {
std::cout << T::message << std::endl;
}

int main() {
PrintMessage<A>(nullptr);
PrintMessage<B>(nullptr);
return 0;
}

https://ideone.com/sVP6AY

如果我没记错的话,该解决方案甚至可以使用 Visual C++ 2010。在 C++ 17 中有更好的方法吗?

最佳答案

如果您知道要检查哪个函数或成员,您可以创建一个type_trait

template<class T, class = void>
struct has_message : std::false_type { };

template<class T>
struct has_message<T, std::void_t<decltype(T::message)>> : std::true_type { };

template<class T>
void PrintMessage()
{
if constexpr (has_message<T>::value)
std::cout << T::message << std::endl;
}

关于c++ - 使用 C++17 检测类成员是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62343424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com