경우 나는 기능이 있습니다 std::plus
또는 std::minus
의 인스턴스 true
func
경우확인 표준 : : 함수가 표준 : 플러스 표준 : 마이너스
bool basicArithmetic(std::function<int(int, int)> func) {
}
그것은 반환해야을하지만 난 아무 생각하는 방법이 없습니다 확인하다. 포인터가 아니기 때문에 dynamic_cast
을 사용할 수 없습니다.
경우 나는 기능이 있습니다 std::plus
또는 std::minus
의 인스턴스 true
func
경우확인 표준 : : 함수가 표준 : 플러스 표준 : 마이너스
bool basicArithmetic(std::function<int(int, int)> func) {
}
그것은 반환해야을하지만 난 아무 생각하는 방법이 없습니다 확인하다. 포인터가 아니기 때문에 dynamic_cast
을 사용할 수 없습니다.
당신은 target()
멤버를 사용할 수 있습니다. 특정 객체에 대한 테스팅은 그렇게 간단한 것처럼 보이지 않습니다. 원래의 질문에는 필요하지 않지만 코드는 함수 포인터의 특정 객체를 테스트하는 방법도 보여줍니다.
완벽한! 고맙습니다 – Tips48
std::function
에는 std::function::target_type
및 std::function::target
과 같이이 특정 작업을 위해 설계된 2 개의 편리한 멤버가 있습니다. 유형
#include <functional>
#include <iostream>
int f(int, int) { return 0; }
int g(int, int) { return 0; }
void test(std::function<int(int, int)> const& arg)
{
std::cout << "test function:\n";
if (arg.target<std::plus<int>>()) {
std::cout << "it is plus\n";
}
if (arg.target<std::minus<int>>()) {
std::cout << "it is minus\n";
}
int (*const* ptr)(int, int) = arg.target<int(*)(int, int)>();
if (ptr && *ptr == f) {
std::cout << "it is the function f\n";
}
if (ptr && *ptr == g) {
std::cout << "it is the function g\n";
}
}
int main()
{
test(std::function<int(int, int)>(std::plus<int>()));
test(std::function<int(int, int)>(std::minus<int>()));
test(std::function<int(int, int)>(f));
test(std::function<int(int, int)>(g));
}
테스트 정직 :
http://en.cppreference.com/w/cpp/utility/functional/function
'return func.target == std :: plus
@ Tips48 :'target()'멤버는 함수입니다. 즉, 호출해야합니다. 적절한 유형 또는 널 포인터를 리턴합니다 (문서 참조). 'std :: plus
'target_type'을 확인 하시겠습니까? http://en.cppreference.com/w/cpp/utility/functional/function/target_type –
산술 연산에 * e *가 있습니다. – Potatoswatter
롤 편집 됨 @ Potatoswatter – Tips48