将数十个非成员函数转换为方法
Converting dozens of non-member functions to methods?
假设我们有一些class Foo
和许多非成员函数它们会改变class Foo
的向量;即:
void remove_duplicate_foos(std::vector<Foo>* foos_io) {
std::vector<Foo>& foos = &foos_io;
// removing duplicates
}
假设我们有几十个这样的函数来操作Foo
向量。因此,我们卷起一个名为FooStore
的类,它包含Foo
的向量,并具有操作该Foo
向量的方法。
class FooStore {
public:
void remove_duplicates() {
::remove_duplicates(&foos);
}
private:
std::vector<Foo> foos;
}
现在,有没有什么方便的方法可以重复几十次呢?这是个坏主意吗?函数应该保持非成员吗?
我可以看到这样做的好处,因为您不想将foos暴露在外面…另外,您不希望通过复制/粘贴两次指定"text",这可能会在forward调用中出错。
这或多或少解决了使用宏的问题:
#include <vector>
class Foo{};
void x1(std::vector<Foo>*){}
void x2(std::vector<Foo>*){}
void x3(std::vector<Foo>*){}
class FooStore
{
public:
#define FOO_STORE_FWD(name)
void name()
{
::name(&foos);
}
FOO_STORE_FWD(x1)
FOO_STORE_FWD(x2)
FOO_STORE_FWD(x3)
#undef FOO_STORE_FWD
private:
std::vector<Foo> foos;
};
void testFooStore()
{
FooStore f;
f.x1();
f.x2();
f.x3();
}
此外,我可以看到将一个函数作为朋友的好处,但是这个函数必须"知道"你。在这种情况下,它知道你的成员,而不是你的…
在c++ 11中可以这样修改:
#define FOO_STORE_FWD(name)
auto name() -> decltype(::name(&foos)){ return ::name(&foos); }
这应该处理转发给函数的多个返回类型
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针