C ++ : 제네릭 클래스의 비 제네릭 메서드?

아카시 루 펠라

특정 데이터 유형에 대해서만 제네릭 클래스에 대한 사용자 지정 메서드를 정의하는 데 관심이 있습니다. 그것을 구현하는 좋은 방법이 무엇인지 잘 모르겠습니다. 클래스 외부에 배치하면 클래스 변수에 액세스 할 수 없으므로 결코 그런 식으로 작동하지 않을 것 같습니다. 클래스 안에 배치하면 특정 유형뿐만 아니라 모든 유형 T에서 작동한다는 의미입니다. 제네릭 버전을 정의하고 해당 유형 만 관심있는 입력으로 전송하여 후자의 방식으로 코드를 작동 할 수 있었지만이를 수행하는 더 깔끔한 방법이 있습니까?

다음은 명확하게하는 몇 가지 코드입니다.

#include<iostream>
#include<string>
using namespace std;

template<typename  T>
class abc
{
public:
    void myvoid();
};

template<typename string>
void abc<string>::myvoid()
{
    cout<<"This portion should execute only if an instance of class is called with a    string parameter" ;
}

int main()
{
abc<int> int1;
abc<string> string1;
string1.myvoid(); //should work good
int1.myvoid(); //shouldnt execute myvoid
}  
Juanchopanza

static_assert문제의 메서드가 잘못된 유형으로 사용되는 경우 컴파일을 방지 하는 사용할 수 있습니다 .

#include <type_traits> // for std::is_same

template <typename T>
struct Foo
{
  void foo() const {}
  void bar() const
  {
    static_assert(std::is_same<T, int>::value, "T is not int");
  }
};

int main()
{
  Foo<double> fd;
  fd.foo();       // OK
  //fd.bar();     // ERROR: bar() only works with Foo<int>
  Foo<int> fi;
  fi.foo();       // OK
  fi.bar();       // OK
}

또는를 사용 SFINAE하여 해당 메서드가 존재하는 유형을 제어 할 수 있습니다.

template <typename T>
class Foo
{
 public:
  void foo() const {}

  template<typename T2 = T,
           typename = typename std::enable_if<std::is_same<T, int>::value>::type>
  void bar() {}
};

이 관련 질문을 참조하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ : 제네릭 클래스의 비 제네릭 메서드?

분류에서Dev

비 제네릭 클래스의 제네릭 메서드

분류에서Dev

비 제네릭 클래스의 제네릭 클래스 메서드

분류에서Dev

제네릭 및 비 제네릭 메서드 간의 C # 오버로드 해결

분류에서Dev

C #의 제네릭 클래스가있는 제네릭 메서드

분류에서Dev

정적 비 제네릭 클래스 내의 제네릭 함수?

분류에서Dev

Swift : 제네릭 클래스의 제네릭 유형 비교

분류에서Dev

C #에서 제네릭 형식과 클래스를 비교하는 방법

분류에서Dev

C #에서 제네릭 Lazy 클래스의 공변 사용

분류에서Dev

동적이 아닌 비 제네릭 부모 인터페이스에서 C # 호출 제네릭 인터페이스 메서드

분류에서Dev

C # 제네릭, 여기서 T 클래스 : (상속 클래스)

분류에서Dev

제네릭 클래스의 호출 된 메서드와 동일한 T가있는 매개 변수로 C # 제네릭 클래스

분류에서Dev

제네릭 클래스에 대한 필드 제약 조건-C #

분류에서Dev

추상 클래스 C #에서 중첩 된 제네릭 / 중첩 된 제네릭의 상속

분류에서Dev

C # 메서드에서 제네릭 클래스 참조를 얻는 방법

분류에서Dev

제네릭 클래스 유형 제약이있는 제네릭 메서드

분류에서Dev

Swift의 비 제네릭 함수에서 제네릭 함수 호출

분류에서Dev

C #에서 제네릭 메서드의 값을 얻는 방법

분류에서Dev

C #에서 제네릭 클래스 인스턴스화

분류에서Dev

제네릭 메서드의 제네릭 형식 변환

분류에서Dev

제네릭 메서드의 제네릭 형식 변환

분류에서Dev

제네릭 메서드에 제네릭 클래스 객체 보내기 (Java)

분류에서Dev

클래스의 제네릭 및 메서드 양

분류에서Dev

C # 제네릭 메서드 선택

분류에서Dev

C # 제네릭 메서드 값

분류에서Dev

Neo4jClient에서 C # 제네릭 클래스 사용

분류에서Dev

두 개의 제네릭 매개 변수가있는 C #의 제네릭 메서드

분류에서Dev

컴파일러에서 찾을 수없는 제네릭 형식 클래스의 C # 확장 메서드

분류에서Dev

제네릭 클래스의 제네릭 메서드에 동적 유형의 인스턴스 전달

Related 관련 기사

  1. 1

    C ++ : 제네릭 클래스의 비 제네릭 메서드?

  2. 2

    비 제네릭 클래스의 제네릭 메서드

  3. 3

    비 제네릭 클래스의 제네릭 클래스 메서드

  4. 4

    제네릭 및 비 제네릭 메서드 간의 C # 오버로드 해결

  5. 5

    C #의 제네릭 클래스가있는 제네릭 메서드

  6. 6

    정적 비 제네릭 클래스 내의 제네릭 함수?

  7. 7

    Swift : 제네릭 클래스의 제네릭 유형 비교

  8. 8

    C #에서 제네릭 형식과 클래스를 비교하는 방법

  9. 9

    C #에서 제네릭 Lazy 클래스의 공변 사용

  10. 10

    동적이 아닌 비 제네릭 부모 인터페이스에서 C # 호출 제네릭 인터페이스 메서드

  11. 11

    C # 제네릭, 여기서 T 클래스 : (상속 클래스)

  12. 12

    제네릭 클래스의 호출 된 메서드와 동일한 T가있는 매개 변수로 C # 제네릭 클래스

  13. 13

    제네릭 클래스에 대한 필드 제약 조건-C #

  14. 14

    추상 클래스 C #에서 중첩 된 제네릭 / 중첩 된 제네릭의 상속

  15. 15

    C # 메서드에서 제네릭 클래스 참조를 얻는 방법

  16. 16

    제네릭 클래스 유형 제약이있는 제네릭 메서드

  17. 17

    Swift의 비 제네릭 함수에서 제네릭 함수 호출

  18. 18

    C #에서 제네릭 메서드의 값을 얻는 방법

  19. 19

    C #에서 제네릭 클래스 인스턴스화

  20. 20

    제네릭 메서드의 제네릭 형식 변환

  21. 21

    제네릭 메서드의 제네릭 형식 변환

  22. 22

    제네릭 메서드에 제네릭 클래스 객체 보내기 (Java)

  23. 23

    클래스의 제네릭 및 메서드 양

  24. 24

    C # 제네릭 메서드 선택

  25. 25

    C # 제네릭 메서드 값

  26. 26

    Neo4jClient에서 C # 제네릭 클래스 사용

  27. 27

    두 개의 제네릭 매개 변수가있는 C #의 제네릭 메서드

  28. 28

    컴파일러에서 찾을 수없는 제네릭 형식 클래스의 C # 확장 메서드

  29. 29

    제네릭 클래스의 제네릭 메서드에 동적 유형의 인스턴스 전달

뜨겁다태그

보관