我一直在尋找如何調用一個函數的答案,只有當它存在並發現此問題的一些代碼Is it possible to write a template to check for a function's existence?。我試圖使用std :: is_member_function_pointer作爲鑑別器來調用專門的模板代碼。但是我在輸出中看到了兩次,當我期望看到錯誤而且是真實的時候。有關這可能是爲什麼的任何建議?該代碼還可以在https://ideone.com/HZ17Wf看出std :: is_member_function_pointer始終返回true
#include <iostream>
#include <utility>
#include <type_traits>
namespace Ckb
{
struct Version
{
enum { Major = 1, Minor = 0, Release = 0 };
void CheckDependencies()
{
std::cout << "Ckb Check" << std::endl;
}
};
} // namespace Ckb
namespace Cg
{
struct Version { enum { Major = 1, Minor = 8, Release = 1 }; };
} // namespace Cg
template <typename T, bool> struct RunCheck
{ void operator()() {std::cout << "false" << std::endl;} };
template <typename T> struct RunCheck<T, true>
{ void operator()() { std::cout << "true" << std::endl; } };
template <typename T> void Do()
{
RunCheck<T, std::is_member_function_pointer<void(T::*)()>::value>()();
}
int main()
{
Do<Cg::Version>();
Do<Ckb::Version>();
return 0;
}
你想檢查是否'CheckDependencies()'存在(用正確的簽名)? – Jarod42