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

时间:2013-04-29 15:28:25

标签: c++ function pointers reference

请建议我强制第三方实现者使用pass by reference输入参数类型而不是使用pass by value类型的方法。我知道使用指针我们可以实现这一点,但我不知道如何在参考中做到这一点。

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

2 个答案:

答案 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版。