Cố gắng làm một cái gì đó như ...
template <class T>
struct Wrapper
{
template <class U>
void set(const U& u) { myT = u; }
template <class F>
void set(F f) { myT = f(); }
T myT;
};
Tôi biết tôi cần sử dụng SFINAE ở đây nhưng làm cách nào để phân biệt tham số gọi lại với tham số giá trị? Sẽ an toàn khi cho rằng giá trị không thể được sử dụng làm cuộc gọi lại.
Tôi đã thử enable_if
với is_function, result_of
, invoke_result
, is_invocable
, và những người khác, nhưng không ai trong số nó hoạt động đúng. Nó thậm chí có thể?
constexpr
hơn SFINAE vì thời gian biên dịch tốt hơn