>백엔드 개발 >C++ >런타임에 결정된 형식 인수를 사용하여 일반 메서드를 호출하는 방법은 무엇입니까?

런타임에 결정된 형식 인수를 사용하여 일반 메서드를 호출하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-30 15:36:09731검색

How to Call a Generic Method with a Runtime-Determined Type Argument?

실행 시에만 알려진 유형 인수를 사용하여 일반 메서드 호출

문제: 제네릭 메서드를 동적으로 호출

다음을 사용하여 일반 메서드를 호출하려고 합니다. 런타임까지 알려지지 않은 유형 인수. 예를 들어, 인터페이스 목록이 있고 각 인터페이스에 대해 일반 메서드를 호출하려고 합니다.

해결책: 반사 기반 동적 호출

컴파일 시 유형 인수를 알 수 없기 때문입니다. 시간이 지나면 제네릭과 함께 전통적인 메서드 호출을 사용할 수 없습니다. 대신, 리플렉션을 사용하여 런타임에 얻은 형식 인수를 기반으로 일반 메서드를 동적으로 호출해야 합니다.

이 접근 방식을 구현하는 방법은 다음과 같습니다.

  1. 일반 메서드: Type.GetMethod를 사용하여 일반 메서드를 검색합니다.
  2. 일반 유형 구성 인수: Type.GetTypeArguments를 사용하여 일반 유형 매개변수를 식별합니다. 그런 다음 사용하려는 실제 유형 인수를 나타내는 Type 개체를 만듭니다.
  3. 일반 메서드 인스턴스 만들기: 일반 메서드에 MakeGenericMethod를 사용하여 지정된 유형으로 특정 인스턴스를 만듭니다. 인수.
  4. 일반 메서드 호출: 마지막으로 생성된 일반 메서드 인스턴스에 대해 Invoke를 사용하여 호출합니다. 동적으로 실행됩니다.

코드의 예

// Original Method
public void Method<T>() {
    // Method body
}

// Main Method
var assembly = Assembly.GetExecutingAssembly();
var interfaces = assembly.GetTypes().Where(t => t.Namespace == "MyNamespace.Interfaces");

foreach (var interfaceType in interfaces) {
    MethodInfo genericMethod = typeof(Test).GetMethod("Method");
    MethodInfo specificMethod = genericMethod.MakeGenericMethod(interfaceType);
    specificMethod.Invoke(null, null); // No arguments for this example
}

리플렉션을 활용하면 이 접근 방식을 통해 런타임 시 알 수 없는 유형 인수를 사용하여 일반 메서드를 동적으로 호출할 수 있습니다.

위 내용은 런타임에 결정된 형식 인수를 사용하여 일반 메서드를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.