3 回答

TA貢獻1813條經(jīng)驗 獲得超2個贊
template<typename T> struct X { X(T data) {} }; template<typename T> void f(X<T> x) {}
f
f(10);
T
int
和int
template<typename T> struct X { X(T data) {} X(int data) {} //another constructor };
T
f(10)
T
template<typename T> struct X<T*> //specialized for pointers { X(int data) {}; };
T
f(10)
std::function
std::function
std::function
).

TA貢獻1796條經(jīng)驗 獲得超7個贊
template <typename R, typename T>int myfunc(std::function<R(T)> lambda){ return lambda(2);}int r = myfunc([](int i) { return i + 1; });
template <typename Func, typename Arg1>static auto getFuncType(Func* func = nullptr, Arg1* arg1 = nullptr) -> decltype((*func)(*arg1)); template <typename Func>int myfunc(Func lambda){ return myfunc<int, decltype(getFuncType<Func, int>())>(lambda);}
template <typename Func, typename Arg1>static auto getFuncType(Func* func = nullptr, Arg1* arg1 = nullptr) -> decltype((*func)(*arg1)) {};
template <typename Func>int myfunc(Func lambda){ return myfunc<int, decltype(getFuncType<Func, int>())>(lambda);}
template <typename R, typename T>int myfunc(std::function<R(T)> lambda){ return lambda(2);}template <typename Func, typename Arg1>static auto getFuncType(Func* func = nullptr, Arg1* arg1 = nullptr) -> decltype((*func)(*arg1)) {};template <typename Func>int myfunc(Func lambda){ return myfunc<int, decltype(getFuncType<Func, int>())>(lambda);}int r = myfunc([](int i) { return i + 1; });
template <typename Func, typename Arg1, typename Arg2>static auto getFuncType(Func* func = nullptr, Arg1* arg1 = nullptr, Arg2* arg2 = nullptr) -> decltype((*func)(*arg1, *arg2)) {};
- 3 回答
- 0 關(guān)注
- 601 瀏覽
添加回答
舉報