我发誓我已经在互联网上搜索了这个确切的问题,但无法找到任何解决方案。
以下是设置:
template <typename T>
class Foo {
static bool bar;
public:
struct Baz {
void quux() {
// I want to access bar here
}
};
// friend typename struct Foo<T>::Baz;
// The above works, but I'm not sure if it's what I need?
};
我正在尝试做什么?
答案 0 :(得分:2)
访问不是问题,只需在Baz中使用Foo<T>::bar
即可。我认为更大的问题是你需要为Foo<T>::bar
分配存储空间。这意味着在您的Foo.cpp文件中,您必须实际实例化您可能想到的所有模板。例如:
template <typename T>
class Foo {
static bool bar;
public:
struct Baz {
void quux() {
// I want to access bar here
Foo<T>::bar = true;
}
};
static bool getBar() { return bar; }
};
// allocating storage for bars
template<>
bool Foo<int>::bar = false;
template<>
bool Foo<double>::bar = false;
int main() {
Foo<int> fint;
Foo<double> fouble;
cout << Foo<int>::getBar() << " " << Foo<double>::getBar() << '\n';
Foo<int>::Baz baz;
baz.quux(); // alter int bar
cout << Foo<int>::getBar() << " " << Foo<double>::getBar() << '\n';
}
答案 1 :(得分:1)
“我正在尝试做什么?”
不,通过范围或继承,这些仍然是独立的(虽然是嵌套的)和不相关的类。
// friend typename struct Foo<T>::Baz; // The above works, but I'm not sure if it's what I need?
我也不确定这是否是您真正需要的,但是由于Baz
在private
的{{1}}部分声明,因此您无法访问它,除非提供Foo<T>
类声明(内部类似乎是一个不错的选择),或者使friend
成员const
。