Programing

클래스 내에서 템플릿 함수를 만드는 방법은 무엇입니까?

lottogame 2020. 6. 24. 07:58
반응형

클래스 내에서 템플릿 함수를 만드는 방법은 무엇입니까? (C ++)


템플릿 기능을 만들 수 있다는 것을 알고 있습니다.

template<typename T>
void DoSomeThing(T x){}

템플릿 클래스를 만들 수 있습니다.

template<typename T>
class Object
{
public:
    int x;
};

그러나 템플릿 내에 클래스가 아닌 클래스를 만든 다음 해당 클래스의 함수를 템플릿으로 만들 수 있습니까? 즉 :

//I have no idea if this is right, this is just how I think it would look
class Object
{
public:
    template<class T>
    void DoX(){}
};

또는 클래스가 템플릿의 일부가 아니지만 기능이있는 정도까지?


당신의 추측은 맞습니다. 기억해야 할 것은 선언과 함께 멤버 함수 템플릿 정의 가 cpp가 아니라 헤더 파일에 있어야한다는 것입니다. 비록 클래스 선언 자체에있을 필요는 없습니다 .


여기 참조 : 템플릿 , 템플릿 메서드 , 멤버 템플릿, 멤버 함수 템플릿

class   Vector
{
  int     array[3];

  template <class TVECTOR2> 
  void  eqAdd(TVECTOR2 v2);
};

template <class TVECTOR2>
void    Vector::eqAdd(TVECTOR2 a2)
{
  for (int i(0); i < 3; ++i) array[i] += a2[i];
}

예, 템플릿 멤버 함수는 여러 경우에 완벽하게 합법적이고 유용합니다.

유일한 경고는 템플릿 멤버 함수가 가상 일 수 없다는 것입니다.


가장 쉬운 방법은 선언과 정의를 같은 파일에 넣는 것이지만 크기가 큰 실행 파일이 발생할 수 있습니다. 예 :

class Foo
{
public:
template <typename T> void some_method(T t) {//...}
}

또한 템플릿 정의를 별도의 파일에 넣을 수 있습니다. 즉, .cpp 및 .h 파일에 넣을 수 있습니다. 템플릿 인스턴스화를 .cpp 파일에 명시 적으로 포함하기 만하면됩니다. 예 :

// .h file
class Foo
{
public:
template <typename T> void some_method(T t);
}

// .cpp file
//...
template <typename T> void Foo::some_method(T t) 
{//...}
//...

template void Foo::some_method<int>(int);
template void Foo::some_method<double>(double);

참고 URL : https://stackoverflow.com/questions/972152/how-to-create-a-template-function-within-a-class-c

반응형