네임 스페이스 std에서 템플릿 클래스를 전달하는 방법은 무엇입니까?
#ifndef __TEST__
#define __TEST__
namespace std
{
template<typename T>
class list;
}
template<typename T>
void Pop(std::list<T> * l)
{
while(!l->empty())
l->pop();
}
#endif
내 주에서 그 기능을 사용했습니다. 오류가 발생합니다. 물론, 나는 더 많은 템플릿 매개 변수가 있다는 것을 알고 있습니다 std::list
(할당 자 생각). 그러나 그것은 요점 옆에 있습니다. 전달할 수 있도록 템플릿 클래스의 전체 템플릿 선언을 알아야합니까?
편집 : 전에 포인터를 사용하지 않았습니다-참조였습니다. 포인터로 시도해 보겠습니다.
문제는 템플릿 클래스를 전달할 수 없다는 것입니다. 예, 템플릿 을 올바르게 선언하려면 모든 템플릿 매개 변수 와 해당 기본값 을 알아야합니다.
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
그러나 이러한 사전 선언조차도 namespace std
표준에 의해 명시 적으로 금지되어 있습니다. 넣을 수 있는 유일한 것은 일반적으로 사용자 정의 유형 std
의 템플릿 전문화입니다std::less
. 필요한 경우 다른 사람이 관련 텍스트를 인용 할 수 있습니다.
그냥 #include <list>
걱정하지 마십시오.
실수로 이중 밑줄을 포함하는 모든 이름은 구현에서 사용하도록 예약되어 있으므로 TEST_H
대신에 대신을 사용해야합니다 __TEST__
. 경고 나 오류를 생성하지는 않지만 프로그램에 구현 정의 식별자와 충돌이 있으면 컴파일되거나 올바르게 실행되지 않을 수 있습니다. 형식이 잘못되었습니다 . 밑줄로 시작하고 대문자로 된 이름도 금지됩니다. 일반적으로, 어떤 마법을 다루는 지 모른다면 밑줄로 시작하지 마십시오.
나는 그 문제를 해결했다.
C ++ (Eclipse Juno)의 네트워크 시뮬레이션을 위해 OSI 레이어 (슬라이더 창, 레벨 2)를 구현하고있었습니다. 프레임 (템플릿 <class T>
)과 상태 (상태 패턴, 전달 선언)가있었습니다.
해결책은 다음과 같습니다.
에서 *.cpp
파일, 당신은 헤더 파일을 포함해야 앞으로 당신, 즉
ifndef STATE_H_
#define STATE_H_
#include <stdlib.h>
#include "Frame.h"
template <class T>
class LinkFrame;
using namespace std;
template <class T>
class State {
protected:
LinkFrame<int> *myFrame;
}
cpp :
#include "State.h"
#include "Frame.h"
#include "LinkFrame.h"
template <class T>
bool State<T>::replace(Frame<T> *f){
그리고 ... 다른 수업.
정방향 선언에는 완전한 템플릿 인수 목록이 지정되어 있어야합니다.
사용할 수있는 제한적인 대안이 있습니다
헤더:
class std_int_vector;
class A{
std_int_vector* vector;
public:
A();
virtual ~A();
};
cpp :
#include "header.h"
#include <vector>
class std_int_vector: public std::vectror<int> {}
A::A() : vector(new std_int_vector()) {}
[...]
실제 프로그램에서 테스트되지 않았으므로 완벽하지 않을 것으로 예상하십시오.
참고 URL : https://stackoverflow.com/questions/3879162/how-to-forward-declare-a-template-class-in-namespace-std
'development' 카테고리의 다른 글
node.js 앱의 코딩 스타일 가이드? (0) | 2020.07.03 |
---|---|
"토큰 라이저", "파서"및 "렉서"가 무엇인지 그리고 이들이 서로 어떻게 관련되고 사용되는지에 대한 명확한 정의를 찾고 있습니까? (0) | 2020.07.03 |
파이썬 커맨드 라인에서 나가기 (0) | 2020.07.03 |
단축키를 사용하여 Google 검색 결과 탐색 (0) | 2020.07.03 |
인스턴스간에 클래스 데이터를 공유하지 않으려면 어떻게해야합니까? (0) | 2020.07.03 |