質問する
420 次
1 に答える
6
ラムダの型は、operator()
. ではありませんstd::function<>
。
型を特殊化する代わりに、最初の引数が呼び出し 3 のファンクターであるかどうかを確認できます (デモ: http://ideone.com/IQ4N6L ):
#include <iostream>
#include <type_traits>
template<typename F, typename ...Args>
auto call(F&& f, Args&& ...args)
-> typename std::enable_if<std::is_same<decltype(f()), void>::value>::type
{
std::cout << "call 3\n";
}
template<typename ...Args>
void call(Args&& ...args) {
std::cout << "call 1\n";
}
int main() {
call(1);
call([](){});
}
于 2012-12-22T20:11:51.310 に答える