Distance
,它使用constexpr unsigned char mm2cm = 10
Distance
是一个模板类,我必须在头文件中定义mm2cm
和Distance
。bar
仅在此头文件中可见,而不是在包含此头文件的 cpp 文件中可见,即//Distance.hpp
constexpr unsigned char mm2cm = 10;
template <typename UnitType>
struct Distance{
UnitType mm;
UnitType convToCm() const { return mm2cm * mm; }
};
//Main.cpp
#include <Distance.hpp>
#include <iostream>
int main(){
//I do not want to be able to use mm2mm outside Distance.hpp, as follows
std::cout << (int)mm2cm << std::endl;
}
我可以在头文件的开头和结尾使用
#define mm2cm 10
和 #undef mm2cm
来解决这个问题(而不是 constexpr unsigned char mm2cm = 10
一般来说,const关键字是定义常量的首选,应该使用const关键字来代替#define。
解决此问题的另一种方法是使
mm2cmm
成为 Distance
的私有静态成员。
如果有人能为我提供最优化的方法来确保
mm2cm
仅对 Distance
可见或仅在此头文件中可见,我将不胜感激
试试这个:
#ifndef DISTANCE_HPP
#define DISTANCE_HPP
namespace {
constexpr unsigned char mm2cm = 10; // Only visible within this header file
}
template <typename UnitType>
struct Distance {
UnitType mm;
UnitType convToCm() const { return mm * mm2cm; }
};
#endif // DISTANCE_HPP