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;
}
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,该解决方案甚至可以与 Visual C++ 2010 一起使用。在 C++ 17 中有没有更好的方法来做到这一点?