function의 깊은 이해
#include
#include
using namespace std;
// C
int c_function(int a, int b)
{
return a + b;
}
//
class Functor
{
public:
int operator()(int a, int b)
{
return a + b;
}
};
int main(int argc, char** argv)
{
int(*f)(int, int); // ,
f = c_function;
cout << f(3, 4) << endl;
Functor ff = Functor(); // ,
cout << ff(3, 4) << endl;
c++ 11 기능 도입
#include
#include
using namespace std;
std::function< int(int)> Functional;
//
int TestFunc(int a)
{
return a;
}
// Lambda
auto lambda = [](int a)->int{ return a; };
// (functor)
class Functor
{
public:
int operator()(int a)
{
return a;
}
};
// 1.
// 2.
class TestClass
{
public:
int ClassMember(int a) { return a; }
static int StaticMember(int a) { return a; }
};
int main()
{
//
Functional = TestFunc;
int result = Functional(10);
cout << " :"<< result << endl;
// Lambda
Functional = lambda;
result = Functional(20);
cout << "Lambda :"<< result << endl;
//
Functor testFunctor;
Functional = testFunctor;
result = Functional(30);
cout << " :"<< result << endl;
//
TestClass testObj;
Functional = std::bind(&TestClass::ClassMember, testObj, std::placeholders::_1);
result = Functional(40);
cout << " :"<< result << endl;
//
Functional = TestClass::StaticMember;
result = Functional(50);
cout << " :"<< result << endl;
return 0;
}
호출 가능한 실체가 std로 변환되는 것에 대해:function 대상은 다음과 같은 두 가지 원칙을 준수해야 한다. 변환된 std::function 대상의 매개 변수는 호출 가능한 실체의 매개 변수로 변환할 수 있다.실체를 호출할 수 있는 반환 값은 std::function 대상의 반환 값으로 변환할 수 있습니다.std:::function 대상의 가장 큰 용도는 함수 리셋을 실현하는 것입니다. (실제 작업에서 이 점을 사용합니다.) 사용자는 서로 같거나 같지 않은 것을 검사하는 데 사용할 수 없지만 NULL이나nullptr와 비교할 수 있습니다.
깊이 이해하다
#include
#include
위에서 보듯이function은 일반 함수,lambda표현식과 함수 대상류를 통일시킬 수 있습니다.그것들은 같은 유형이 아니지만,function 템플릿 클래스를 통해 같은 유형의 대상 (function 대상) 으로 바뀌어 맵에 넣을 수 있다.
또한 제가 실제 테스트한 결과를 보면 VS2013 컴파일러에서 상술한 코드는 통과할 수 있고 5판 의 512페이지 첫 줄에서 말한 "오류:mod는 함수 지침이 아니다"는 오류가 발생하지 않았습니다. 아마도 C++11 표준에 대한 다른 실현일 것입니다.
#include
#include
using namespace std;
// C
int c_function(int a, int b)
{
return a + b;
}
//
class Functor
{
public:
int operator()(int a, int b)
{
return a + b;
}
};
int main(int argc, char** argv)
{
//
std::function callableObject;
// C
callableObject = c_function;
cout << callableObject(3, 4) << endl;
//
Functor functor;
callableObject = functor;
cout << callableObject(3, 4) << endl;
// lambda ( )
callableObject = [](int a, int b){
return a + b;
};
cout << callableObject(3, 4) << endl;
#include
#include
#include
using namespace std;
// C
int c_function(int a, int b)
{
return a + b;
}
//
class Functor
{
public:
int operator()(int a, int b)
{
return a + b;
}
};
int main(int argc, char** argv)
{
Functor functor;
std::list<:function int="">> callables;
callables.push_back(c_function);
callables.push_back(functor);
callables.push_back([](int x, int y)->int{
return x + y;
});
for (const auto& e : callables)
{
cout << e(3, 4) << endl;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.