Zebrafish
Zebrafish

Reputation: 13886

Can you have typedefs for a single function?

I'm just wondering, in the following function I'm trying to get the return type of "Getter" into the function arguments. The default arguments is so that you don't need to pass the final arguments, especially if you don't provide a setter. Is there a cleaner way?

template <typename Getter, typename Setter>
        void makeSpinnerBox(Getter getter, Setter setter = char, float sensitivity = 0.f,
             std::invoke_result_t<Getter> minValue = std::invoke_result_t<Getter>(), 
             std::invoke_result_t<Getter> maxVal = std::invoke_result_t<Getter>(), 
             std::invoke_result_t<Getter> incrementStep = std::invoke_result_t<Getter>());

Maybe a typedef?

Upvotes: 0

Views: 50

Answers (1)

krisz
krisz

Reputation: 2696

Using a defaulted template parameter:

template <typename Getter, typename Setter, typename R = std::invoke_result_t<Getter>>
void makeSpinnerBox(Getter getter, Setter setter, float sensitivity = 0.f,
                    R minValue = R(), R maxVal = R(), R incrementStep = R())

Upvotes: 3

Related Questions