【发布时间】:2014-03-25 09:31:20
【问题描述】:
我试图实现一个函数被传递一些简单的参数(例如std::string)但不能被置换。
想象一下两个函数
void showFullName(std::string firstname, std::string lastname) {
cout << "Hello " << firstname << " " << lastname << endl;
}
void someOtherFunction() {
std::string a("John");
std::string b("Doe");
showFullName(a, b); // (1) OK
showFullName(b, a); // (2) I am trying to prevent this
}
如您所见,可以混合函数参数的顺序 - 这是我试图阻止的。
我的第一个想法是某种 typedef,例如
typedef std::string Firstname;
typedef std::string Lastname;
void showFullName(Firstname firstname, Lastname lastname)
//...
但是(至多是 GNU 的)c++ 编译器的行为不像我想要的那样;)
有人对此有好的解决方案吗?
【问题讨论】:
-
你的意思是
class Firstname : public std::string {};? -
@AbhishekBansal 不! 标准库项目不是为继承而设计的。永远不要那样做。
-
我知道这是矫枉过正。另一种方法是创建一个以名字和姓氏为字段的类 Person。
-
@Manu343726:为什么不呢?
-
@Abhishek Bansal:但是......想象 firstname 和 lastname 本身将是一个类的字段,例如类人。这里有很多课程只是为了一件简单的事情:-|
标签: c++ function types parameters enforcement