Я немного знаком с безопасностью типов и успешно использовал ее раньше в методах, которые получают несколько параметров одного и того же типа (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
было бы в порядке.
std::pair
так:struct type1{}; struct type2{}; std::pair<type1, std::vector<std::string>> v1; std::pair<type2, std::vector<std::string>> v2;
- person Galik   schedule 29.03.2017BOOST_STRONG_TYPEDEF
кажется тем, что я ищу, но полезно знать о его ограничениях :) - person user2891462   schedule 29.03.2017