0

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

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

2 回答 2

2

据我了解,您的问题是您想向第三方实施者提供头文件,但您想限制他们使用按值获取参数的函数。

如果您要将头文件公开为接口 您无法阻止任何人向类添加函数。话虽如此,如果您已经提供了采用引用参数的函数,那么第三方实现者就不能添加按值接受参数的相同命名函数,因为这会给它们带来歧义错误。

于 2013-04-29T15:35:18.440 回答
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 版。

于 2013-04-29T15:35:06.110 回答