【发布时间】:2016-04-08 12:59:04
【问题描述】:
我有两节课。第一类做一些事情,然后调用第二类的方法。一流的每种方法都这样做。是否可以使用一些宏来自动化代码实现?
例子:
class A
{
void Do1()
{
Do task x
ClassB b;
b.Do1();
Do task y
}
void Do2()
{
Do task x
ClassB b;
b.Do2();
Do task y
}
}
这种方式可以实现吗?这不起作用,但类似。
#define VOID_FUNC(name) \
Do task x;\
ClassB b;\
b.##name##();\
Do task y;
class A
{
void Do1()
{
VOID_FUNC(__FUNCTION__);
}
void Do2()
{
VOID_FUNC(__FUNCTION__);
}
}
【问题讨论】:
-
可能,但更可爱的方法是使用模板
std::bind和std::function。我一定会赞成一个能勾勒出这一点的答案。 -
似乎没有一种简单的方法可以创建您所要求的内容,而且不太简单的方法会很快变得丑陋;如果您解释为什么要这样做可能会有所帮助,因为可能有更好的方法来实现您的目的?看起来好像您想围绕现有类编写一个包装器,该类管理该类使用的某种资源,其中任务 x 将获取资源,而任务 y 将释放它。我想到的一个想法是,C++ 标准库通常允许自定义分配器,这些分配器实际上可能具有适应性,甚至适用于日志记录之类的事情。