-6
來自第三方的代碼庫,我得到錯誤:非常令人不安的錯誤信息
錯誤140錯誤:一個指向綁定功能僅可用於調用函數
功能造成的錯誤:
/** Static name of function to call */
static FName GetAddComponentFunctionName()
{
static const FName AddComponentFunctionName(GET_FUNCTION_NAME_CHECKED(AActor, AddComponent));
return AddComponentFunctionName;
}
// Returns FName(TEXT("FunctionName")), while statically verifying that the function exists in ClassName
// &((ClassName*)0)->FunctionName will generate 'error: cannot create a non-constant pointer to member function' on the Mac
#if PLATFORM_WINDOWS
#define GET_FUNCTION_NAME_CHECKED(ClassName, FunctionName) \
((void)sizeof(&((ClassName*)0)->FunctionName), FName(TEXT(#FunctionName)))
#else
#define GET_FUNCTION_NAME_CHECKED(ClassName, FunctionName) \
FName(TEXT(#FunctionName))
#endif
再次,這個代碼編譯與VS,但與英特爾的ICL
*「解除引用空指針是UB」*不一定正確,請參閱http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 – dyp 2014-10-12 13:46:36
@Sneftel,嗨,我提供的代碼只是複製和粘貼。謝謝您的回答。我是否正確理解你,因爲你建議將宏擴展更改爲sizeof(&ClassName :: FunctionName)?謝謝 – 2014-10-12 13:51:49
@Thereisnothingwecando這應該可以,是的。或者,您可以無條件地使用第二個'GET_FUNCTION_NAME_CHECKED'實現。第一個版本是提供錯誤檢查,而不是額外的功能。 – Sneftel 2014-10-12 13:55:54