我应该将 C 静态函数转换为未命名命名空间中的私有成员函数还是自由函数?
Should I convert C static function to private member function or free function in unnamed namespace?
我想将一些 C 遗留代码更新为 C++。假设我在 C:
中有类似于此代码的内容
//my_struct.h
typedef struct myStruct {
//some members go here
} myStruct;
int f1(myStruct*);
void f2(myStruct*);
//my_struct.c
#include "my_struct.h"
static int helper(myStruct* st)
{
return 21;
}
int f1(myStruct* st)
{
return helper(st);
}
void f2(myStruct* st) {}
如果我在 CPP 中将其更新为以下内容:
//myStruct.h
struct myStruct {
int f1();
void f2();
private:
int helper();
};
//myStruct.cpp
int myStruct::f1(){
return helper();
}
void myStruct::f2(){}
int myStruct::helper(){
return 21;
}
在C++中将全局静态C函数转换为私有成员函数有什么影响?
前一种方法和后一种方法之间的pros/cons(关于编译、链接、运行时)是什么?我没有在函数内部使用参数来缩短示例(如果没有使用我在其他问题中读到它可能应该转到匿名命名空间)。
//myStruct.h
struct myStruct {
int f1();
void f2();
}
//myStruct.cpp
namespace{
int helper(myStruct *st){
return 21;
}
}
int myStruct::f1(){
return helper(this);
}
void myStruct::f2(){}
What is the impact of converting the global static C function to a private member function in C++?
影响是您已经为 (public) 接口的模块部分创建了一个(私有的、内部的)实现细节。
What would be the pros/cons (regarding compilation, linking, runtime) between the previous approach and the following one?
缺点:
您在界面中添加了语义噪声
也就是说,有更多内容供客户阅读和思考,即使这不应该影响他们,
对内部实现细节的更改可能需要接口的所有客户端重新编译,而不仅仅是re-linking
也就是说,如果您想更改 helper
,现在会更新 public header 并导致不应该受到影响的文件的广泛重新编译
优点:
- 有none.
在 C++ 中,向匿名命名空间添加 implementation-file-local 等详细信息(例如 helper
)是惯用的做法。
我想将一些 C 遗留代码更新为 C++。假设我在 C:
中有类似于此代码的内容//my_struct.h
typedef struct myStruct {
//some members go here
} myStruct;
int f1(myStruct*);
void f2(myStruct*);
//my_struct.c
#include "my_struct.h"
static int helper(myStruct* st)
{
return 21;
}
int f1(myStruct* st)
{
return helper(st);
}
void f2(myStruct* st) {}
如果我在 CPP 中将其更新为以下内容:
//myStruct.h
struct myStruct {
int f1();
void f2();
private:
int helper();
};
//myStruct.cpp
int myStruct::f1(){
return helper();
}
void myStruct::f2(){}
int myStruct::helper(){
return 21;
}
在C++中将全局静态C函数转换为私有成员函数有什么影响?
前一种方法和后一种方法之间的pros/cons(关于编译、链接、运行时)是什么?我没有在函数内部使用参数来缩短示例(如果没有使用我在其他问题中读到它可能应该转到匿名命名空间)。
//myStruct.h
struct myStruct {
int f1();
void f2();
}
//myStruct.cpp
namespace{
int helper(myStruct *st){
return 21;
}
}
int myStruct::f1(){
return helper(this);
}
void myStruct::f2(){}
What is the impact of converting the global static C function to a private member function in C++?
影响是您已经为 (public) 接口的模块部分创建了一个(私有的、内部的)实现细节。
What would be the pros/cons (regarding compilation, linking, runtime) between the previous approach and the following one?
缺点:
您在界面中添加了语义噪声
也就是说,有更多内容供客户阅读和思考,即使这不应该影响他们,
对内部实现细节的更改可能需要接口的所有客户端重新编译,而不仅仅是re-linking
也就是说,如果您想更改
helper
,现在会更新 public header 并导致不应该受到影响的文件的广泛重新编译
优点:
- 有none.
在 C++ 中,向匿名命名空间添加 implementation-file-local 等详细信息(例如 helper
)是惯用的做法。