我想創建一個重載的模板,如果一個類包含它,則運行一個函數Foo(),否則它不執行任何操作。函數模板的C++ Decltype
我一直在試圖運行它這樣
template <typename T, typename U>
decltype(std::declval<T>().Foo()) TriggerFoo(T* t, U& u)
{
t->Foo(u);
}
template <typename T, typename U>
void TriggerFoo(T* t, U& u)
{
std::cout << "Does not have Foo()" << std::endl;
}
int main()
{
A a;
B b;
U u; // Some type
TriggerFoo<A, U>(&a, u); // I want to print "Has Foo()".
TriggerFoo<B, U>(&b, u); // Prints "Does not have Foo()".
return 0;
}
目前,這兩個類都傳遞給了「不具有美孚()」實例。它編譯,但顯然它不工作,這很可能是因爲我不明白declval。我也嘗試過使用非模板函數,但它仍然不起作用。
任何幫助將不勝感激。
http://stackoverflow.com/questions/257288/is-it-possible-to-write-ac-template-to-check-for-a-functions-existence –
我很感謝答案,它是有幫助的,但我不想檢查自己該函數是否包含該類型。理想情況下,我想使它成爲通用的,以便通過檢查它是否包含Foo()來知道要調用哪個模板,而不必創建另一個類/結構,例如has_foo。 – mojo1mojo2