【发布时间】:2014-12-18 09:58:32
【问题描述】:
这可能看起来有点深奥,但我有一个这样的类结构,其中一个单例模板类定义在与实际使用它的类不同的命名空间中。
namespace F{
template<typename>
struct Foo{
static Foo instance;
};
}
namespace B{
struct Bar{};
F::Foo<Bar> F::Foo<Bar>::instance; //error C2888
}
产量:
error C2888: 'Foo<void> Foo<void>::instance' : symbol cannot be defined within namespace 'B'
我知道它应该是这样的,但在我的例子中,Foo 是我的库的一部分,Bar 是由客户端定义的,所以它们不一定是同一个命名空间的一部分。定义Foo<void>::instance 的部分是宏的一部分,因此我可以向用户隐藏复杂性。
有什么方法可以让我从另一个命名空间中定义一个类的成员?
【问题讨论】:
-
在这里查看我的答案:stackoverflow.com/a/2060691/241536
-
不,这是不可能的。假设两个(!)命名空间有一个 Bar 和一个 F::Foo
::instance -
反对重复声明。我知道它不起作用,我要求解决方法。该解决方案也不能解决我的问题。我什至不想声明一个类,我只想在里面定义一个符号。
-
@DieterLücking 你能详细说明一下吗?这是解释还是解决方案?
-
@Cheersandhth.-Alf 天哪,是的!非常感谢,这正是我需要的!也许我应该问“如何避免在实现单例时需要定义外部符号。”
标签: c++ templates c++11 namespaces