如何强制函数实现应该是引用输入类型而不是值类型
How to force the function implementation should be reference input type rather than value type
请建议我一种方法来强制第三部分实现者应该使用按引用传递输入参数类型,而不是使用按值传递类型。我知道使用指针我们可以实现这一点,但我不知道如何在参考中做到这一点。
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;
}
如果您不想按值传递输入参数,请不要实现第三个版本
相关文章:
- 强制转换为引用类型
- 如何修复函数样式强制转换或类型构造的预期"("?
- 存储模板类型以强制转换回派生<T>
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- Zedboard zynq-7000 Opencl 浮点数从类型 'double*' 强制转换为类型 'double' 无效
- 模板化类的自动类型推导强制
- 使用固定大小类型时强制对位字段(C++14 之前)进行签名
- 从指针进行特征3类型的强制转换/复制(溢出uint8_t)
- C++基于子类型动态强制转换结构
- C++-将模板类型对象强制转换为特定的数据类型
- 对于动态类型为强制转换类型的对象,dynamic_cast失败
- 如何让 VS2013 停止生成对整数类型之间强制转换的__dtol3、__dtoui3和其他函数的调用
- C++基于运行时类型实现强制转换
- C++:从值类型指针强制转换为包含迭代器
- 从成员函数指针到另一个类型的强制转换,返回严格的别名问题
- 如何在模板类型中强制静态成员初始化?或如何获取从模板类型派生的所有类的计数
- VS是否优化了对相同类型的强制转换?
- 使用模板进行类型双关语强制转换
- 如何在c++中防止这种类型的强制转换?
- 在java无符号类型中强制转换