2017-03-15 2 views
1

내가이 샘플 C++ 코드를 컴파일에 사용할 것을 g ++ 컴파일러 매개 변수를 찾기 위해 노력하고있다 :함수를 std :: function의 템플릿 매개 변수로 사용할 수 있습니까?

cpp를 참조에서
#include <stdio.h> 
#include <functional> 

struct mystruct 
{ 
    int a; 
    int operator()(int y) { return y + 1; } 
}; 

int main() 
{ 
    std::function<mystruct> foo; 
    return 0; 
} 

는 표준 : : 함수 템플릿 매개 변수 "다른 함수 객체 ... 또는"할 수 있다는 기록 . 나는 큰 프로젝트를 여러 std :: function과 project를 g ++로 빌드 할 수있다. 나는 이러한 코드에 VS2015하지만 컴파일러 아래 구축을 위해 노력하고 불평 :

오류 C2027 : 정의되지 않은 유형의 사용 '표준 : _ Get_function_impl < _Fty>' [ _Fty = MYSTRUCT ]

와 을 나는 g ++에서 작은 샘플 위의 컴파일하려고 -std와 = C++ (11) 또한 comlains :

오류 : 총 '표준 : : 함수 A'는 불완전한 형태를 가지고 있으며, 그래서 생각

을 정의 할 수 없습니다 우리의 큰 buildable project g ++은 아마도 그러한 기능을 제공하는 확장을 전환했을 것입니다.

+2

어디에서 템플릿 매개 변수가 함수 유형 (예 :'int (double, char)')이 아닌 것을 볼 수 있습니까? cppreference는 함수 개체를 저장할 수 있다고 말합니다. 어쨌든,'mystruct'가 둘 이상의'operator()'오버로드를 가졌거나'operator()'가 템플릿 화 되었다면 어떻게 될까요? 안전하게 호출 서명을 입력 - 삭제할 수 없습니다. – chris

답변

3

아마도 템플릿 인수를 저장할 함수 객체와 혼합했을 것입니다. 나는 당신이 쓰고 싶은 것이 무엇인지 믿습니다.

std::function<int(int)> foo{mystruct{}}; 
0

답변은 functor가 다른 functor에 대한 템플릿 매개 변수가 될 수 없다는 것입니다. 모든 게시물 주셔서 감사합니다.

관련 문제