2011-06-19 39 views
0

什麼是調用模板類型的成員函數的好方法?以下foo()代碼是否僅針對定義了bla()函數的類型進行編譯?具有特定成員方法的C++模板類型

class A { void bla(); }; 

template<typename T> 
void foo() { 
    T t; 
    t.bla(); 
} 

int main() { 
    foo<A>(); 
    return 0; 
} 

我可以使用boost::enable_if只定義此功能對於具有bla()方法類型?如果是的話,那是個好主意嗎?我想象「概念」(我一無所知)的想法可能是需要在這裏使用的。

回答

2

對於每一種嘗試調用foo函數的類型,編譯器都會用給定的函數和編譯函數生成一個新的foo函數,如果您可以使用給定的類型編譯foo函數,它將起作用。

因此,在你的情況下,foo函數將適用於每個具有bla函數並且具有默認構造函數的類型。

1

您的代碼示例看起來正確;如果在沒有bla()成員的類型上實例化,它將會出錯。

1

它也只能編譯爲默認構造的類型。編譯器會爲任何不是默認構造的類型拋出錯誤,並且沒有可以不接受任何參數的bla()函數。

相關問題