Reimagining這樣的回答:How to detect whether there is a specific member variable in class?:
template<typename T> struct Hasm_pScience
{
struct Fallback { int m_pScience; }; // introduce member name "m_pScience"
struct Derived : T, Fallback { };
template<typename C, C> struct ChT;
template<typename C> static char (&f(ChT<int Fallback::*, &C::m_pScience>*))[1];
template<typename C> static char (&f(...))[2];
static bool const value = sizeof(f<Derived>(0)) == 2;
};
struct A { float m_pScience; };
struct B { int X; };
int main(int argc, _TCHAR* argv[])
{
std::cout << Hasm_pScience<A>::value << std::endl; // 1
std::cout << Hasm_pScience<B>::value << std::endl; // 0
return 0;
}
總的原則,以谷歌爲SFINAE(替換故障不是一個錯誤)。
來源
2011-09-15 00:08:57
MSN
如果你將成爲唯一一個將其維持下去的人:) –
我幾乎肯定這隻會導致比解決更多的麻煩。我想不出有什麼辦法可以做到這一點,而不會涉及對界面的更改,這意味着您應該重新考慮您在此處列出的設計。 – tenfour
如果目標類(在本例中爲「CHandler」)沒有公共m_pScience成員,則編譯器會在模板實例化時通知您。 –