7
這是我如何可以有條件地使類的構造方法:有條件地允許構造
struct Foo
{
template<class T>
Foo(T* ptr, boost::enable_if<is_arithmetic<T> >::type* = NULL)
{}
};
我想知道爲什麼我需要通過一個虛擬的參數來完成啓用。爲什麼我不能只是寫:
struct Foo
{
template<class T>
Foo(boost::enable_if<is_arithmetic<T>, T>::type* = NULL)
{}
};
因此,如果我理解正確,問題是要確保模板參數扣除成功。這可以通過使用類型 - foo.Method明確地實例化模板來完成,或者使Method獲取允許扣除的參數 - 模板 void方法(U * ptr,boost :: enable_if > :: type * = NULL) {} –
2011-03-20 00:22:09
@MK:是的,對於大多數成員函數,您可以選擇。使用構造函數,沒有辦法明確指定模板參數。 – 2011-03-20 00:28:03
@MK:對於其他函數,'enable_if'很好地放在返回值上,以免干擾模板參數推理。唉,構造函數沒有返回類型。 OTOH,沒有人會接受構造函數的地址,因此沒有人會爲這個「隱藏的」額外論證而煩惱。 – UncleBens 2011-03-20 00:56:57