說我有一個Boost.Phoenix lambda表達式,如下所示:我可以在編譯時告訴Boost.Phoenix lambda的一組特定輸入類型是否有效?
_1 * 4.5 + (3.0/_2)
有沒有給出一個很好的方式,在編譯時,檢測lambda表達式是否有效,與論據相關類型列表_1
,_2
等等?我在想,我想用enable_if
來確定輸入類型是否受lambda支持。如果是這樣,lambda將被直接調用,如果沒有,我想生成一個no-op。僞代碼將是這樣的:
template <typename F, typename A1, typename A2>
enable_if<F::is_supported<A1, A2>, result_of<F(A1,A2)>::type >::type func(F func, A1 arg1, A2 arg2)
{
func(A1, A2);
}
template <typename F, typename A1, typename A2>
disable_if<F::is_supported<A1, A2> >::type func(F func, A1 arg1, A2 arg2)
{
}
我只是不知道如何is_supported
將實施,還是它甚至有可能。我沒有使用C++ 11;我只會假設C++ 03(因爲Phoenix需要它)。
「*我只會假設C++ 03(因爲Phoenix需要它)*」Phoenix在C++ 11下工作良好。 – ildjarn 2013-02-14 22:15:50
@ildjam:對不起,我不是故意暗示的。我的意思是說Phoenix至少需要C++ 03,所以假設它至少是C++ 98。 – 2013-02-14 23:39:00
啊,理解。 – ildjarn 2013-02-14 23:57:07