我在工具包中使用了一个名为Cache的类(具有各种可公开访问的方法的文件)。使用回调刷新缓存,这需要一个仿函数对象。仿函数对象在我的工具箱中调用Cache函数中的一个函数refresh()。
该实例位于工具包中未命名的命名空间内(因为我不希望客户端直接访问它)。
现在,我已经完成了所有工作,但是真的希望Cache拥有自己的头文件,以便明确它上面有哪些方法。
我的问题是我有以下内容:
// toolkit.cxx
#include "cache.h"
// Can't define operator()() here since it needs access the to cache instance
struct Functor {
void operator() ();
};
// Define Cache's fucntions here (including use of Functor)
namespace {
Cache cache;
// This gives a compiler error - definition of operator Functor::()() is not in namespace enclosing 'Functor'
void Functor::operator() () {
cache.refresh();
}
}
因此,我无法在未命名的命名空间中定义Functor::operator()()
,也无法将其移出。
我考虑过的一个解决方案是将整个批次带入未命名的命名空间,但这也必须包含#include
。这是推荐的吗?这不是我以前真正看到的事情(这表明这可能是一个糟糕的计划......),而且我无法找到有关这种方法的利弊的更多信息。
这将是解决方案:
// toolkit.cxx
namespace {
#include "cache.h"
Cache cache;
struct Functor {
void operator()() {
cache.refresh();
};
// Define Cache's fucntions here (including use of Functor)
}
有人可以评论第二种方法的优点/缺点(特别是缺点)吗?任何替代解决方案也欢迎
答案 0 :(得分:0)
解决方案1
在匿名a and b
内定义a = [1,2,4,5] and b = [2,3,5,6]
。
Functor
解决方案2
在定义匿名namespace
之后定义#include "cache.h"
namespace {
Cache cache;
struct Functor {
void operator() () {
cache.refresh();
}
};
}
。
Functor
解决方案3
在匿名namespace
之前声明#include "cache.h"
namespace {
Cache cache;
}
struct Functor {
void operator() () {
cache.refresh();
}
};
,但要定义
在定义匿名Functor
之后namespace
。
Functor::operator()