如何强制函数实现应该是引用输入类型而不是值类型

How to force the function implementation should be reference input type rather than value type

本文关键字:类型 何强制 输入 引用 实现 函数      更新时间:2023-10-16

请建议我一种方法来强制第三部分实现者应该使用按引用传递输入参数类型,而不是使用按值传递类型。我知道使用指针我们可以实现这一点,但我不知道如何在参考中做到这一点。

c++:

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;
}

我理解你的问题是,你想提供一个头文件给第三方实现者,但你想限制他们从有一个函数接受参数值

如果你打算将头文件作为接口公开,你不能阻止任何人向类中添加函数。已经说过,如果你已经提供了接受引用参数的函数,那么第三方实现者不能添加相同的命名函数,因为它会给他们一个歧义错误。

让我们明确一下:

// 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;
}

如果您不想按值传递输入参数,请不要实现第三个版本