请建议我强制第三方实现者使用pass by reference输入参数类型而不是使用pass by value类型的方法。我知道使用指针我们可以实现这一点,但我不知道如何在参考中做到这一点。
typedef struct data {
int a;
int b;
} data;
//Ambiguous - pass by value
//void fun(const data value) { // <= Need a way to restrict this type of imp
// std::cout<<value.a<<value.b;
//}
// pass by reference
void fun(const data& value) {
std::cout<<value.a<<value.b;
}
int main() {
data d;
d.a = 1; d.b = 2;
fun(d);
return 0;
}
答案 0 :(得分:2)
据我所知,你的问题是你想向第三方实现者提供一个头文件,但你想限制他们拥有一个按值获取参数的函数。
如果您要将头文件公开为接口您无法阻止任何人向该类添加功能。话虽如此,如果你已经提供了带参考参数的函数,那么第三方实现者就不能添加相同的命名函数,该函数按值获取参数,因为它会给它们一个模糊错误。
答案 1 :(得分:0)
让我们明确一点:
// pass by CONSTANT reference
void fun(const data& value) {
std::cout<<value.a<<value.b;
}
// pass by reference
void fun(data& value) {
std::cout<<value.a<<value.b;
}
// pass by value
void fun(data value) {
std::cout<<value.a<<value.b;
}
// pass by pointer
void fun(data* value) {
std::cout<<value.a<<value.b;
}
如果您不想按值传递输入参数,请不要实现第3版。