2014-04-28 39 views
1

我想在編譯時類是否FooBar具有要麼變量value或者成員變量initValue()檢測檢測。在編譯時類是否有一個成員variabe或功能

struct Foo 
{ 
    static const int value; 
    static int initValue(); 
}; 

struct Bar 
{ 
}; 

我已經發現了幾個升壓和升壓MPL類和utils的出現做只是這一點,但我不能確定使用哪種如BOOST_MPL_HAS_XXX_TRAIT_DEFvalid_member_metafunction。我知道有可能推出我自己的探測器,但我寧願不要。

+1

[檢查是存在構件(https://stackoverflow.com/questions/1005476/how-to-detect-whether-there-is-a-specific-member-variable-in-class)和[檢查方法是否存在](https://stackoverflow.com/questions/11249199/is-there-a-way-to-check-if-a-member-exists-in-a-struct);把它們放在一起用'std :: enable_if' – David

+0

@Dave謝謝,但我寧願不推出我自己的。 – Olumide

回答

1

找到它。 has_static_member_datahas_static_member_function來自Boost TTI庫。

#include <boost/tti/has_static_member_data.hpp> 
BOOST_TTI_HAS_STATIC_MEMBER_DATA(value) // Generates class template has_static_member_data_value 
... 
has_static_member_data_value<Foo, int>::value; // returns true 
has_static_member_data_value<Bar, int>::value; // returns false 
相關問題