在这个问题中讨论了为什么暴露私有类型auto
:
#include <iostream>
using namespace std;
class Base {
class PrivateClass {
public:
void bar() { cout << "PrivateClass" << endl; }
};
public:
PrivateClass foo() {
PrivateClass a;
return a;
}
};
int main() {
Base b;
auto p = b.foo();
p.bar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++ 11标准完全没问题.我还没有得到的是这个成语在实际应用中如何有用. 是否有问题可以有效地使用这个成语,或者它应该被视为关键词的"好奇"副作用?
Cha*_*via 10
如果未指定返回类型,则可能很有用.例如,未指定调用std::bind
或以前调用的返回对象boost::bind
.它是一些实现定义的仿函数,但如果不查看实现细节,您实际上无法知道它的类型.在C++ 11的auto
关键字之前,您可以使用boost::function
变量类型来存储结果bind
,或者您可以将结果传递bind
给带有模板参数的函数.使用C++ 11,您可以使用存储结果对象auto
.
因此,如果某个类具有某种内部类型,则不必将实际类型公开给公共API.该类的用户可以简单地使用该auto
关键字,并且API文档可以说该类型是"未指定的".这使实际内部类型保持私有实现细节,这通常可以改善封装.