함수 포인터를 사용하여 내장된 참조를 사용하려면 템플릿 클래스의 "보다 큼" 연산자(">")와 같은 연산자에서는 올바른 유형 오버로드를 지정해야 합니다. 그러나 이는 어려울 수 있습니다.
산술 및 논리 연산자와 같은 C 내장 연산자는 실제 연산자 함수가 아닙니다. 대신 컴파일러에 의해 어셈블리 명령어로 직접 변환됩니다. 따라서 이에 대한 함수 포인터를 얻을 수 없습니다.
C 표준에 정의된 함수 개체는 함수 포인터처럼 동작하는 작업을 수행하는 방법을 제공합니다. 그러나 실제 기능은 아닙니다. 이들은 Operator() 함수에서 유사한 연산자로 붕괴되는 템플릿 객체입니다.
예를 들어, std::greater 함수 객체는 보다 큼 연산자(">")를 나타냅니다. 템플릿 클래스에서 함수 포인터 인수로 사용할 수 있습니다.
<code class="cpp">template<typename ParamsType, typename FnCompareType> class MyAction { public: MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare) : arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare_) {} bool operator()() { if((fnCompare_)(arg0_,arg1_)) { // Do this } else { // Do s.th. else } } private: ParamsType& arg0_; ParamsType& arg1_; FnCompareType& fnCompare_; }</code>
<code class="cpp">void doConditional(int param1, int param2) { MyAction<int, std::greater<int>> action(param1, param2); if(action()) { // Do this } else { // Do that } }</code>
함수 포인터는 내장 연산자와 함께 직접 사용할 수 없지만 실제 함수로 구현되는 표준 라이브러리 연산자와 함께 사용할 수 있습니다. 그러나 연산자에 대한 템플릿 클래스의 특정 인스턴스를 인스턴스화해야 하며 컴파일러는 템플릿 인수를 올바르게 추론하기 위해 힌트를 요구할 수 있습니다.
위 내용은 ## C 내장 연산자에 대한 함수 포인터를 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!