我在这方面搜索了一段时间,但一直得到的答案都没有回答这个具体的场景。
我有一个名为VisibleGameObject
的类。我想知道如果我将我的普通包含放在头文件中(以便其他开发人员可以使用相同的类),并将相同的包含放在我的预编译头文件stdafx.h
中会发生什么。
我不希望开发人员依赖于我的pch。
// VisibleGameObject.h
#pragma once
#include "SFML\Graphics.hpp"
#include <string>
class VisibleGameObject
{
public:
VisibleGameObject();
virtual ~VisibleGameObject();
virtual void Load( std::string filename );
virtual void Draw( sf::RenderWindow & window );
virtual void SetPosition( float x, float y );
private:
sf::Sprite _sprite;
sf::Image _image;
std::string _filename;
bool _isLoaded;
};
实现:
// VisibleGameObject.cpp
#include "stdafx.h"
#include "VisibleGameObject.h"
...
PCH:
// stdafx.h
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>
当我构建项目(在编译一次后),
#include <SFML/Graphics.hpp>
每次都会重新编译吗?因为它被包含在这个类的头文件中。我认为这是发生了什么:pch首先被包含在cpp文件的翻译单元中,然后#include <SFML/Graphics.hpp>
被包含保护,所以pch正常工作,我的包含被忽略。在Visual Studio中,不包括pch会导致错误。我只是想确认这种行为。是否正常使用pch,没有重新编译任何<SFML/Graphics.hpp>
代码?