【发布时间】:2010-02-11 19:37:55
【问题描述】:
我从来没有真正需要在模板中使用全局变量(实际上我不太支持这样的设计)但是这个topic 让我很好奇。
即使回答了,它也启发了我尝试不同的方法。我没有使用继承,而是想出了这个:
class Bar {};
class {
private:
Bar bar;
template <class T> friend class Foo;
} static foobar_singleton;
template <class T>
class Foo
{
public:
static Bar bar() { return foobar_singleton.bar; }
};
对我来说,foobar_singleton 的工作方式类似于“非成员静态私有”,因为它的内容只能由模板类 Foo 访问。尽管我不确定这实际上是一个优势,但它也避免了继承。我的解决方案似乎可以只包含标题,而不需要另一个定义文件。
我想看看对于这种方法的看法,与用作让我好奇的线程答案的方法相比。例如,我想听一些问题的例子:
1. 您在我的示例中看到任何明显的优势吗?或者就此而言,明确的缺点?
2.您是否建议将 bar 属性设为静态成员并将使用的类命名为单例?
3. 这让你们想起了任何设计模式?可能类似于pimpl idiom?
4. 您看到任何编译器可移植性问题吗? (我仅使用 MSVC 和 GCC 对其进行了测试)
5.关于成为可能的仅标头实现是否正确?我实际上并不完全确定静态变量foobar_singleton
提前致谢!
【问题讨论】: