【发布时间】:2017-03-29 10:49:15
【问题描述】:
我对类型安全有点熟悉,并且之前在接收多个相同类型(bool)参数的方法中成功使用它以避免混淆。例如:
// Old version of the method
void sendPackage(bool sendImmediately, bool dividePacket);
// Type safe version
enum SendImmediatelyPreference
{
SEND_IMMEDIATELY,
DO_NOT_SEND_IMMEDIATELY
};
enum PacketDivisionPreference
{
DIVIDE_PACKET,
DO_NOT_DIVIDE_PACKET
};
void sendPackage(
SendImmediateltPreference immediatePref,
PacketDivisionPreference divisionPref);
所以神秘的sendPackage(true, false) 变成了sendPackage(SEND_IMMEDIATELY, DO_NOT_DIVIDE_PACKET)。
问题是这只是bool 的一个选项。我有一个接受多个std::vector<std::string> 的方法,我想尽量减少用户以错误顺序输入参数的可能性。
我可以考虑创建包含 std::vector<std::string> 的不同类,并覆盖大量 std::vector 方法或公开内部向量。
有没有更简单的方法,某种 typedef 可以强制类型安全?使用boost 就可以了。
【问题讨论】:
-
见 boost strong typedef boost.org/doc/libs/1_63_0/libs/serialization/doc/…
-
我会看看this question。不幸的是,C++ 没有强类型的 typedef,但您可以尝试解决这个问题。
-
我不知道如何在不使用不同类型的情况下获得类型安全。我想你可以像这样使用
std::pair:struct type1{}; struct type2{}; std::pair<type1, std::vector<std::string>> v1; std::pair<type2, std::vector<std::string>> v2; -
感谢您的回答,@BartekBanachewicz 和 @RichardCritten。
BOOST_STRONG_TYPEDEF似乎是我正在寻找的东西,但很高兴知道它的局限性:)
标签: c++ c++11 boost type-safety