【发布时间】:2015-03-16 20:48:08
【问题描述】:
我的库以字符串的形式从消息总线获取信息。这些字符串是不同类型实体的标识符,需要对其进行处理。
当前方法可能如下所示:
void doWork(const std::string& carModelId,
const std::string& dealershipId,
const std::string& invoiceId);
float getPrice(const std::string& carModelId,
const std::string& dealershipId);
由于到处都在使用这些不同类型的 ID,我想确保将正确类型的 id 传递给方法,而不是使用纯字符串。
我目前的想法是创建一些包装这些字符串的结构
struct carModel
{
std::string id;
}
这样这些方法只接受正确类型的 id
void doWork(const carModel& carModelId,
const dealership& dealershipId,
const invoice& invoiceId);
另一方面,这似乎是针对常见问题的大量额外样板代码。
问题:获得字符串参数类型安全的最佳做法是什么?
【问题讨论】:
-
我认为您的思路是正确的——您通过将离散参数包装到一个集合对象中来有效地创建一个数据传输对象 (DTO)。如果它们都有一个共同的“属性”,即 id,您可能需要考虑创建一个基类,其中汽车/经销商/发票派生自该基类。 DTO 方法的优点是您可以维护接口规范,但它允许您有机会(有一定的注意事项)在以后需要时将元素添加到 DTO 中,而不会破坏现有接口。
-
你需要一个强大的 typedef。
-
@BartekBanachewicz 是的,我不知道这个。使用该关键字,问题就会重复。
-
@Beginner 链接的问题中已经有答案,如果您同意它是重复的,那么我不需要在这里发布答案。
标签: c++ type-safety