2017-03-01 2 views
-3

파일 입력을 쉽게 코드 작성하도록되어있는 C++ 용 헤더 파일이 있는데 메모리 효율적이었습니다.
I는 다음과 같습니다 내 헤더 파일의 클래스가 있습니다C++ 클래스에서 #include 할 수 있습니까?

class FileInputOutput { 
    #include <fstream> 

을하지만 포함 할 것입니다 있는지 확실하지 않습니다 그 어쨌든 상단에있는 #include 문처럼 아니면 그냥 그것을 포함 할 경우 수업이 호출되었을 때.

누구든지 나를 도울 수 있습니까?

+0

다음은 사용자 소모품에 대한 질문에 대한 답변입니다. http://stackoverflow.com/questions/7347033/including-headers-inside-class-declaration-definition – NathanOliver

+0

표준 헤더 IMHO의 경우 전역 공간에 포함해야합니다 우두머리의 시작 부분에. – NathanOliver

+1

@NathanOliver이 예제는 표준 헤더를 사용합니다. 클래스 정의에 표준 헤더를 포함시키는 시나리오는 거의 상상할 수 없습니다. –

답변

5

#include는 C++ 클래스에 가능합니까?

질문 제목 : 가능합니다. 예.

c (++) 전처리 기는 #include '파일의 텍스트를 확장 만하고 C++ 유효성 검사는 컴파일의 다른 단계에서 확인됩니다.

코드

class FileInputOutput { 
#include <fstream> 
}; 

처럼은 클래스 내부 fstream에서 모든 텍스트를 삽입합니다.

그것은 아마도 당신이 원하는 것이 아닙니다.

그냥 단지 컴파일시 전처리가 포함 된 파일 내용의 복사/붙여 넣기 결과

#include <fstream> 

class FileInputOutput { 
    std::fstream fs; 
}; 
1

#includefstream에서 클래스 선언을 사용합니다. 그렇습니다. 물론 그렇게 할 수는 있지만, 효율성면에서는 아무 것도 사지 않습니다. 포함 된 파일의 내용을 포함 파일에 직접 인라인으로 작성한 것과 같습니다.

2

C++ (및 C)의 전 처리기는 참조 된 파일의 텍스트를 #include 문을 사용하는 파일로 효과적으로 복사하여 작동합니다.

그래서 당신은 다음과 같이 코드를 작성할 때

Something.h

int my_rand() { 
    return 4; //chosen by dice roll, guaranteed to be fair 
} 

하여 Main.cpp

#include "Something.h" 

int main() { 
    return my_rand(); 
} 

적절한 컴파일 전에 최종 파일이 시작과 같습니다.

int my_rand() { 
    return 4; //chosen by dice roll, guaranteed to be fair 
} 

int main() { 
    return my_rand(); 
} 
매우 이상한 동작이 발생합니다

class my_class { 
    #include<fstream> 
/*...*/ 
}; 

같은 것을 쓰는 귀하의 경우에는

, 거의 확실히 컴파일되지 않습니다, <fstream>의 전체 내용은 중간에 복사됩니다 때문에 클래스를 작성하거나 클래스를 다른 클래스에 삽입하는 것을 처리하기 위해 작성된 코드는 <fstream>입니다.

그러나 프로그램 중간에 #include을 할 수있는 경우가 있습니다. 관찰 :

내 Resource.txt

R"D(
Blah Blah Blah Blah Blah 
)D" 

에게 제대로 콘솔에

Blah Blah Blah Blah Blah 

을 인쇄합니다

int main() { 
    std::string blah_string = "" //The "" is unnecessary, but I use it to make Intellisense shut up 
#include "My Resource.txt" 
    ; 
    std::cout << blah_string << std::endl; 
    return 0; 
} 

하여 Main.cpp

를, 그것은

를 작성 같은 때문에
int main() { 
    std::string blah_string = 
R"D(
Blah Blah Blah Blah Blah 
)D" 
    ; 
    std::cout << blah_string << std::endl; 
    return 0; 
}