그래서, 나는 지금까지 이런 일이? IOW, 다른 멤버 함수를 Foo
으로 전달하고 싶습니다. 그러나 대부분은 DoNothing
에서 이 기본값이됩니다. 우리는 모든 멤버 함수를 안전하게 가정 할 수있다. 나는 인자를 취하지 않는다.기본값은
Q
기본값은
1
A
답변
2
Func(...)
의 기본값은&Foo::DoNothing()
입니까?
당신은 기본적으로 그냥 필요한 기본 인수를 지정
struct Foo { int DoNothing() const { } };
template<
typename T,
typename C,
typename R = decltype(std::declval<const C>().DoNothing())
>
T Func(C const* obj,
R (C::*mf)() const = &C::DoNothing,
T* maybe_unused = nullptr)
{
(obj->*mf)();
return T{};
}
주 당신이 다른 두 가지를 지정해야합니다 : 하나의 기본 멤버 함수를 위해 같이 전화를 추가로 기본 반환 값 유형을을 기본 주장에서 추론 될 수 없다.
0
변경 Func을에 :
template<typename T, typename R, typename C>
T Func(C const* obj, R (C::*mf)() const=&C::do_nothing, T* maybe_unused = nullptr)
{
...
}
과 나뿐만 아니라 const를 할 do_nothing()을 변경 : obj가 CONST이기 때문에 실제로으로 변경해야한다고
가template<typename T, typename R, typename C>
T Func(C const* obj, R (C::*mf)()=&C::do_nothing, T* maybe_unused = nullptr)
{
...
}
참고.
그건 문제가되지 않습니다. –
@ ForeverLearning 유일한 오류는 Foo f가 const가 아니라는 것입니다. 그렇지 않으면 괜찮습니다. –
@JakeFreeman 그래서 당신 의견에 * 문제가 무엇입니까? – Jodocus