【发布时间】:2021-12-01 08:05:27
【问题描述】:
我有一个模板类
template<class T>
class MyClass
{
public:
MyClass() { privateField = 0; };
T getPrivateField() {
return privateField;
}
private:
T privateField;
};
还有一个模板函数,它将 MyClass 的实例作为参数
template<class T>
T foo(MyClass<T> mc) {
return mc.privateField;
}
我很困惑,我可以在模板函数中看到 MyClass 的私有字段,但实际上不能使用它。
Here is an example of field visibility(screenshot)
问题:
为什么我可以在模板函数中准确地看到 MyClass 的私有字段,以及如何在我的代码中禁用它(如果可能的话)?还是就像 Visual Studio 的一个功能?
【问题讨论】:
-
代码自动完成不是由 C++ 定义的。这只是您的 IDE,向您展示了一个您实际上无法使用的成员。
-
我拿你的模板专门化
template<> class MyClass<int> { public: int privateField; };- 那么函数模板怎么能假设什么?智能感知只是想提供帮助。 -
请注意,在您显示的屏幕截图中,IntelliSense确实在“privateField”条目中添加了一个小挂锁图标。
-
@AdrianMole 是的,我意识到我有点不专心
标签: c++ class templates access-modifiers