我有一组松散相关的头库,我想让它们一起工作,而不是紧密耦合。我想到的一种方法是尝试包含其他头文件,如果找到它们,那么我可以相应地生成代码。所以也许我会在vector.hh中有一个向量类:
#ifndef __VECTOR_HH__
#define __VECTOR_HH__
bunch of vector-y stuff
#endif
然后在另一个文件中的 coordinates.hh (假设它进行坐标转换):
#ifndef __COORDINATES_HH__
#define __COORDINATES_HH__
#include <vector.hh>
class SomeCoordinateType {
#ifdef __VECTOR_HH__
operator vector() { <convert to vector> }
#endif
}
#endif
这个想法是用户获取他们需要的任何头文件。如果他们获取了vector.hh 头文件以及coordinates.hh,那么我将为他们创建转换运算符,如果没有,我不这样做。这一切都取决于能否让#include 指令在失败时不会产生致命错误。有没有办法做到这一点?