强制c++中函数参数的类型

Enforcing type of function arguments in C++

本文关键字:类型 参数 函数 c++ 强制      更新时间:2023-10-16

我尝试实现函数传递一些参数,这些参数都很简单(例如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 std::string Firstname;
typedef std::string Lastname;
void showFullName(Firstname firstname, Lastname lastname)
//...

但是(大多数GNU的)c++编译器不像我想要的那样运行;)

有人有好的解决方案吗?

编译器无法读懂你的思想,知道哪个字符串包含名字,哪个字符串包含姓氏(毕竟他们不会说英语)。就编译器而言,两个std::string对象是可互换的(并且typedef只是为类型创建别名,而不是新类型)。

您可以将字符串封装在自定义类中:

struct Name {
    std::string str;
};
struct Lastname {
    std::string str;
};
void showFullName(Name name, Lastname lastname) { /* ... */ }